思路
此题需要优化,要利用输入的两个向量的index是逐增的,而要加内积只有两个向量index相同的情况,故在v上设指针k。比如u的index=4时,k指向v的index1,故k++,直到k指向的v的index>4为止…再看k指向的index等于4还是大于4。若等于4,加内积;若大于4,不动,让i++。
// An highlighted block
#include<bits/stdc++.h>
using namespace std;
int n,a,b;
long long sum=0;
struct vec{
int index;
int value;
}u[500010],v[500010];
int main()
{
scanf("%d %d %d",&n,&a,&b);
for(int i=0;i<a;i++){
scanf("%d %d",&u[i].index,&u[i].value);
}
for(int i=0;i<b;i++){
scanf("%d %d",&v[i].index,&v[i].value);
}
int k=0;//k作为v的指针
for(int i=0;i<a;i++){
while(v[k].index<u[i].index&&k<b-1) k++;
if(v[k].index==u[i].index){
sum+=v[k].value*u[i].value;
k++;
}
}
printf("%lld",sum);
return 0;
}