首页 > 其他 > 详细

分块的一道题

时间:2018-12-19 15:00:08      阅读:152      评论:0      收藏:0      [点我收藏+]

题意:

区间+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}$

分块的一道题

原文:https://www.cnblogs.com/yinwuxiao/p/10142893.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!