分块的一道题

题意:

区间+k,查询=c的个数(c一开始给定)

1.当k为正数

2.不保证k为正数

题解:

两个的复杂度是不一样的

1的话显然每个数只会成为1次c

我们记录区间比c小的最大值就可以了

每次进入一个区间当且仅当这个区间有+k>c的数

复杂度$nlogn$

2的话我们考虑分块

里面开个数组维护一下从小到大排列

***下面的$\sqrt{n}$应该是$block$和$n/block$

查询显然是块内二分$\sqrt{n}logn$

修改刚开始以为也是$\sqrt{n}logn$的

对于整块的打加标记$\sqrt{n}$

对于零散可以不用插入后排序

我们按照原来排序扫过去,然后判断这个数在不在当前区间

于是变成合并两个有序表归并排序

于是改个块大小复杂度$n\sqrt{nlogn}$

posted @ 2018-12-19 14:10  尹吴潇  阅读(148)  评论(0编辑  收藏  举报