解题思路:
1.使用前缀和数组找出区间边界
2.边界要注意右边界的取值
3.数组范围是200000,而不是100000,因为一个出行计划有左右两个边界
#include<bits/stdc++.h>
using namespace std;
int L[200005]; //左边界不超过i的个数
int R[200005]; //右边界不超过i的个数
int main()
{
int n,m,k;
cin>>n>>m>>k;
for(int i=0;i<n;i++)
{
int t,c;
cin>>t>>c;
if(k<=t) //如果k大于t则不可能出行
{
int left=max(0,t-c-k+1);
int right=t-k;
L[left]++;
R[right]++;
}
}
for(int i=1;i<200005;i++) //前缀和数组
{
L[i]+=L[i-1];
R[i]+=R[i-1];
}
while(m--)
{
int q;
cin>>q;
int num=L[q]-R[q-1]; //右边界是R[q-1],不是R[q]
cout<<num<<endl;
}
return 0;
}