随笔分类 -  数据结构--分块

摘要:$n \leq 100000$的数列给$m \leq 100000$个操作:操作一,单点修改;操作二,现给$t$种颜色,每种颜色数量给出,加起来为$n-1$,对除了询问给的$k$以外的每个数随机涂色;对一个$k$开始,公差$d$,往左右延伸的下标等差数列$a_i=k+id,L<=i<=R,L<=0< 阅读全文
posted @ 2018-06-13 20:55 Blue233333 阅读(196) 评论(0) 推荐(0)
摘要:$n \leq 50000$的树,有点权$\leq 1e13$,$q \leq 400000$次操作,有两种操作:从$s$跳到$t$每次$k$步,不到$k$步直接跳到$t$,每次把经过的点取根号;同样的跳法,对经过的点求和。 首先一个数根号没几次就变0了因此可以大力修改。根号大力搞,设块大小$S$, 阅读全文
posted @ 2018-04-23 21:32 Blue233333 阅读(384) 评论(0) 推荐(0)
摘要:$n \leq 100000$的数列给$m \leq 300000$的询问,每次问一个区间里选两个数差的最小值。数字$\leq 1e9$。 根号算法: 无脑莫队加个平衡树或者权值线段树来查前驱后继是$n \sqrt{n} log_2n$的。 如果只有删除可以用链表实现,所以想办法去掉插入操作。对左端 阅读全文
posted @ 2018-04-18 08:21 Blue233333 阅读(352) 评论(0) 推荐(0)
摘要:n<=500,n*n的矩阵,m<=60000个询问每次问子矩阵第K小。 方法一:第K小什么的是可以二分的,那就整体二分套二维树状数组吧! 这里有一个细节优化,本来整体二分是logMax的嘛,可以先把数字排个序,就变成logn了。这是没优化的后果(话说3个log确实极卡) 方法二:分块,n*n个数字从 阅读全文
posted @ 2018-01-08 08:39 Blue233333 阅读(181) 评论(0) 推荐(0)
摘要:维护一个序列支持以下操作:区间加,区间求最大子段和。n<=50000,m<=50000。 我TM再也不写分块了。。。 先分块,对于块整体加的操作,假设块里面有若干二元组(x,y),表示一个大小x的区间的和为y,那实际就是求kx+y=z的最大值,而y=-kx+z,所以即求经过这些点、斜率不定的直线的最 阅读全文
posted @ 2017-12-18 21:04 Blue233333 阅读(447) 评论(0) 推荐(0)
摘要:n<=1e5个数,m<=1e5个操作:区间加,查区间最大的1~i号点的和。 第一次见到nsqrt(n)logn能过1e5的。。然而跑得很慢 普通数据结构感觉难下手,那就分块。先处理前缀和数组。一次修改,实际上把一段前缀和加上了一个等差数列,然后把这区间后面的前缀和加上某个固定数字,也可以看成另一个等 阅读全文
posted @ 2017-12-15 13:40 Blue233333 阅读(297) 评论(0) 推荐(0)
摘要:n<=10000个数m<=10000次操作:1、L~R中有多少种数字,2、单点修改,修改次数<=1000。 一种通法是记pre[i]表示i前最近的和a[i]相等的数字,然后问题变成:[L,R]中有多少个pre[i]<L。 方法一:pre数组的动态维护可以用set。对每个数开一个set存所有出现位置, 阅读全文
posted @ 2017-12-14 13:25 Blue233333 阅读(321) 评论(0) 推荐(0)
摘要:n<=40000个数,在线问m<=50000次区间众数,数字Ai<=1e9。 重要结论:$mode(a \cup b)\epsilon mode(a) \cup b$,显然。 用分块做,对区间[L,R]取众数,就先对他们跨过的块O(1)取答案--预处理A(i,j)表示块i到块j的众数即可,然后对两边 阅读全文
posted @ 2017-12-13 21:50 Blue233333 阅读(179) 评论(0) 推荐(0)
摘要:模板 1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 #include<stdlib.h> 5 #include<math.h> 6 //#include<bitset> 7 //#include<iostream> 阅读全文
posted @ 2017-12-13 18:22 Blue233333 阅读(128) 评论(0) 推荐(0)
摘要:感觉这才算入门题吧。。前面那些线段树练习,改几个字符就过了一定要搞成几道题。。 n<=2e5的数列,给常数K<=2e5,m<=2e5个操作,区间加,问一个区间里K的倍数。 这题空间???当成512MB吧。。n*sqrt(n)开得下 每个块记cnt(x,i)表示第x个块有多少数%K=i,以及整块+标记 阅读全文
posted @ 2017-12-12 14:04 Blue233333 阅读(174) 评论(0) 推荐(0)