莫队统计答案,
for(int i=1;i<=m;i++){
while(r<q[i].r) add(s[++r]);
while(r>q[i].r) del(s[r--]);
while(l<q[i].l) del(s[l++]);
while(l>q[i].l) add(s[--l]);
ans[q[i].id]=sum;
}
for(int i=1;i<=m;i++) {
if(ans[i]==(q[i].r-q[i].l+1)) cout<<"Yes\n";
else cout<<"No\n";
}
是错的,
for(int i=1;i<=m;i++){
while(r<q[i].r) add(s[++r]);
while(r>q[i].r) del(s[r--]);
while(l<q[i].l) del(s[l++]);
while(l>q[i].l) add(s[--l]);
ans[q[i].id]=(sum==q[i].r-q[i].l+1)?1:0;
}
for(int i=1;i<=m;i++) {
if(ans[i]) cout<<"Yes\n";
else cout<<"No\n";
}
是对的。
这是为什么呢?