为什么在某些题中,需要将左指针初始置为 1 ,而某些题不用?
e.g: ABC242 G,这题需要初始为1:
ri cl(1),cr(0),tl,tr;
//here, correct initial cl is 1 instead of 0
for(ri i(1);i<=q;++i){
tl=qr[i].l,tr=qr[i].r;
while(cl>tl) temp+=(cnt[a[--cl]]&1),++cnt[a[cl]]; // add(--cl);
while(cl<tl) --cnt[a[cl]],temp-=(cnt[a[cl++]]&1); // del(cl++);
while(cr<tr) temp+=(cnt[a[++cr]]&1),++cnt[a[cr]]; // add(++cr);
while(cr>tr) --cnt[a[cr]],temp-=(cnt[a[cr--]]&1); // del(cr--);
ans[qr[i].ind]=temp;
}
(刚刚VP ABC242因为这个挂了G题 600 分 )
如果cl初值为 0 ,样例的所有询问输出比答案小 1
所以我就直接加了1交上去WA了三个
然后一直到最后都没改出来
而对于大部分题,经刚才测试,不初始化为1也没有问题
测试的类型包括了:
数据很弱的莫队
数据比较强的莫队
套了值域分块的莫队
需要卡常的带修莫队
所以是更新的写法区别导致了初始值的限制吗?
求指教