思路:
用双指针方法求解,i指针遍历a数组,j指针遍历b数组,由于数组升序排列,所以指针具有单调性,i单调增,j单调减。时间复杂度简化到 O(n+m)。
#include<iostream>
using namespace std;
const int N=100010;
int a[N],b[N];
int main(){
int n,m,x;
cin>>n>>m>>x;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<m;i++) cin>>b[i];
for(int i=0,j=m-1;i<n;i++){
while(j>=0&&a[i]+b[j]>x) j--;
if(a[i]+b[j]==x){cout<<i<<" "<<j;break;}
}
}