出发-有效期+1<=做完+等待<=出发
很容易看出来这道题是看每次查询的做完核酸时间+等待时间在多少个区间之内,很容易看出来应该用差分数组做,但是区间左边有可能是负数,所以将不等式整个右移2e5就好了,做题积累的经验太少,不知道数组能开这么大,事实上经过实验,这道题数组开到4e7还没问题,但是开4e8就挂了,当个经验记住吧~~
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int diff[40000005]={0};
int sum[40000005]={0};
int con=200000;
//出发>=做完+等待>=出发-有效期+1
int main() {
int n,m,k;
cin >> n >> m >> k;
int t,c;
int left,right;
for(int i=0;i<n;i++){
scanf("%d %d",&t,&c);
left=t-c+1+con;
right=t+con;
diff[left]+=1;
diff[right+1]-=1;
}
for(int i=1;i<400005;i++){
sum[i]=sum[i-1]+diff[i];
}
int q;
for(int i=0;i<m;i++){
scanf("%d",&q);
q+=k;
cout << sum[q+con] << endl;
}
return 0;
}