带修莫队 6WA+4TLE 求调

P1903 [国家集训队] 数颜色 / 维护队列

@[Respons_](/user/357163) ``g[cnt2].a = b[g[cnt2].i];`` 感觉这句话有些问题,因为后面是直接 ``add(g[T].b), del(g[T].a);``,如果一个地方有多次修改会出问题。
by Missa @ 2022-05-09 21:28:28


当时我这样写的: ```cpp void deal(int t){ if(l <= p[t].x && p[t].x <= r){ del(c[p[t].x]); add(p[t].y); } swap(c[p[t].x], p[t].y); } ``` 主函数中: ```cpp while(t < a[i].t) deal(++t); while(t > a[i].t) deal(t--); ```
by Missa @ 2022-05-09 21:29:10


TLE 的原因我认为是排序,我写的时候是先按 L 的块排序,再按 R 的块排序,最后按时间排序。
by 蒟蒻君HJT @ 2022-05-09 23:09:23


@[Respons_](/user/357163) TLE是排序的问题,带修莫队我是按l所在块为第一关键字,r所在块为第二关键字,t为第三关键字排序,你这样排序明显为我可以让你香菱2个操作t变化都为O(n) cmp代码应该这样写: ``` bool cmp(Q a, Q b){ if(a.pos != b.pos){ return a.pos < b.pos; } if(a.rpos != b.rpos){ return a.rpos < b.rpos; } return a.t<b.t; } ```
by barbatoss @ 2022-05-10 10:35:26


@[Respons_](/user/357163) 应该没WA了,你看一下还有没有T,问题都以注释的形式发剪贴板里了,你对这看一下有没有不懂的
by barbatoss @ 2022-05-10 11:10:14


@[Missa](/user/443664) @[蒟蒻君HJT](/user/131591) @[barbatoss](/user/104155) 感谢!
by shyr @ 2022-05-10 12:41:57


放火烧山,可莉完蛋!
by barbatoss @ 2022-05-10 14:20:29


|