解决问题的时候,代码时间复杂度要为n。
另外还需要注意一下的是后面四个点,测试的index和value数目多、value的值比较大。
1、测试的index和value数目比较多:通过建立全局数组解决
2、value值比较大:通过使用long long int变量类型解决
#include<iostream>
using namespace std;
long long int v1[500001],v2[500001];
int main(){
int n,a,b,record=0;
cin>>n>>a>>b;
long long int index,value,sum=0;
for(int i=0;i<a;i++){
cin>>v1[i]>>v2[i];
}
for(int i=0;i<b;i++){
cin>>index>>value;
for(int j=record;j<a;j++){
//在第一个向量中查找
if(v1[j]==index){
sum+=v2[j]*value;
record=j+1;
//找到了,下一次查找从下一个位置开始
break;
}
else if(v1[j]>index){
record=j;
//没找到,记录当前位置,下一次查找仍从这个位置开始
break;
}
}
}
//虽然是两个for循环嵌套,但时间复杂度为n
cout<<sum<<endl;
}