调了好几天了,莫名其妙会RE,样例能过,好像是d数组会越界
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e5+10;
int n,m,k,t,x[N],y[N],f[N],tmp[N],t1[N],d[N];
int cnt,w;
struct node{
int y,id;
friend bool operator<(node a,node b){
return a.y<b.y;
}
};
vector<node> v1[N];
signed main(){
scanf("%lld%lld",&n,&w);
for(int i=1;i<=n;i++){
scanf("%lld%lld",&x[i],&y[i]);
tmp[x[i]]++;
d[i]=tmp[x[i]];
v1[x[i]].push_back({y[i],i});
}
for(int i=1;i<=w;i++){
if(v1[i].size()) sort(v1[i].begin(),v1[i].end());
}
bool flg=0;
for(int i=1;i<=n;i++){
if(flg) break;
flg=1;
for(int j=1;j<=w;j++){
if(v1[j].size()>0){
flg=0;
break;
}
}
for(int j=1;j<=w;j++){
if(v1[j].size()<i){
f[i]=1e13;
}
f[i]=max(f[i],v1[j][i-1].y);
}
}
for(int i=1;i<=n;i++) {
f[i]=max(f[i],f[i-1]+1);
if(f[i]>=1e13){
break;
}
}
// for(int i=1;i<=n;i++){
// printf("%lld ",d[i]);
// }
scanf("%lld",&m);
for(int i=1;i<=m;i++){
scanf("%lld%lld",&t,&k);
if(t<f[d[k]]){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}