#include<bits/stdc++.h>
using namespace std;
int n,m,k,t,c,q0;
int q[200001];
int main()
{
/*q+k≤ti≤q+k+ci-1
不妨转化一下:
ti-k-ci+1≤q≤ti-k*/
cin >> n >> m >> k;
for(int i=1;i<=n;i++)
{
cin >> t >> c;
q[max(0,t-k-c+1)]++;//差分,q大于等于0
q[max(0,t-k+1)]--;
}
for(int i=1;i<=200000;i++)
{
q[i]+=q[i-1];//求前缀和
}
for(int i=0;i<m;i++)
{
cin >> q0;
cout << q[q0] <<endl;
}
return 0;
}
常规思路是判断每一个 q+k≤ti≤q+k+ci-1 ,这样肯定超时,拿不了满分
不妨转换成 ti-k-ci+1≤q≤ti-k ,用差分前缀和,把每个q 时的情况算出来,查询时直接输出即可