莫队要先移动右指针,具体地
int l=1,r=0;
for(int i=1;i<=m;i++){
while(l<q[i].l) del(a[l++]);
while(l>q[i].l) add(a[--l]);
while(r<q[i].r) add(a[++r]);
while(r>q[i].r) del(a[r--]);
ans[q[i].id]=getans();
}
应改为
int l=1,r=0;
for(int i=1;i<=m;i++){
while(r<q[i].r) add(a[++r]);
while(r>q[i].r) del(a[r--]);
while(l<q[i].l) del(a[l++]);
while(l>q[i].l) add(a[--l]);
ans[q[i].id]=getans();
}
我是看了这个帖子才知道的,不然这辈子都调不出来……