直接按题意模拟就好了,注意index指的是输入进来时候的数组下标。
#include
#include
#include
#include
#define INF 1000000005
using namespace std;
struct NODE
{
int x,id;
double v;
}node[100005],node2[100005];
bool cmp(NODE a,NODE b)
{
return a.x>1;
if(node[mid].x==x) return mid;
if(node[mid].x>x) r=mid-1;
else l=mid+1;
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n,m,k,i;
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=n;i++){
scanf("%d%lf",&node[i].x,&node[i].v);
node[i].id=i;
node2[i].x=node[i].x;
node2[i].v=node[i].v;
}
sort(node+1,node+n+1,cmp);
int indx;
double ans=0;
double sum=0;
for(i=1;i<=m;i++){
scanf("%d",&indx);
indx=check(node2[indx].x,1,n);
int left=indx-1,right=indx+1,tmp1,tmp2,ct=0;
sum=0;
while(ct0){
tmp1=node[indx].x-node[left].x;
}
if(right<=n){
tmp2=node[right].x-node[indx].x;
}
if(tmp1tmp2){
sum+=node[right].v;
right++;
}
else{
if(node[left].id