LOJ6282 数列分块入门 6
标签
- 分块入门
前言
- 我的csdn和博客园是同步的,欢迎来访danzh-博客园~
- 这题一次过了~
简明题意
- 维护序列,支持两种操作:
- 插入:给第l个元素前插入一个元素
- 查询:查询第r个元素的值
思路
- 直接开一个vector[]保存每一块的所有数。对于插入操作,直接找到对应的块,然后对这一块调用vector的insert。对于查询操作,直接把位置偏移过去,然后查询就好了。
- 这题的数据是随机的。如果是构造的,那么可能会多次多同一个块操作,这一块的大小就会变得很大。复杂度就会爆炸了。这里引入了一种叫做重构的思想,一旦发现块的大小 > 2 n >2\sqrt{n} >2n,那么把这个块一分为二,复杂度是 O ( n n ) O(\frac{n}{\sqrt{n}}) O(