rt,可能是因为待修莫队和普通莫队不一样,在add和del的时候应该直接传递颜色,因为upd数组直接记录了颜色
Eg.错误示范
inline void add(int p)
{
if(!cnt[a[p]])psa(cur);
psa(cnt[a[p]]);
}
inline void del(int p)
{
--cnt[a[p]];
if(!cnt[a[p]])--cur;
}
···
while(l<q[i].l)del(l++);
while(l>q[i].l)add(--l);
while(r<q[i].r)add(++r);
while(r>q[i].r)del(r--);
while(now<q[i].tim)
{
psa(now);
int tmp=upd[now].p,c=upd[now].col;
if(l<=tmp&&tmp<=r)del(tmp),add(c);
swap(a[tmp],upd[now].col);
}
while(now>q[i].tim)
{
int tmp=upd[now].p,c=upd[now].col;
if(l<=tmp&&tmp<=r)del(tmp),add(c);
swap(a[tmp],upd[now].col);--now;
}
因为有del(tmp),add(c)存在,tmp是位置,c是颜色
大家知道怎么修改吧()