博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

随笔分类 -  高级数据结构——分块 块状树 块状链表

摘要:给定长为$n$的序列$A_i$,求有多少个区间,满足区间中所有数的出现次数为奇数。 $n\leq 2\times10^5,\ A_i\leq 10^5$。 阅读全文
posted @ 2021-09-11 18:03 SovietPower 阅读(257) 评论(0) 推荐(0)
摘要:给定一棵树,在树上每个点处有$1$个人,每个人有一个忍耐程度$t_i$。当一个人子树内放假的人数$\gt t_i$且他没有放假的时候,他会删库跑路。初始时所有人都没放假。有$m$次操作,每次将一个人由放假变为不放假或由不放假变为放假,然后输出一共有多少个人会删库跑路。 $n,m\leq10^5,\ 0\leq t_i\leq n$。 阅读全文
posted @ 2021-05-11 11:40 SovietPower 阅读(112) 评论(0) 推荐(0)
摘要:维护一棵树,有两种操作: 1.Add x,y,插入一个节点,父节点为$x$边权为$y$。 2.Query x,y,查询起点为$x$,终点在$y$的子树中的最大简单路径边权异或和。 阅读全文
posted @ 2020-10-19 10:10 SovietPower 阅读(134) 评论(0) 推荐(0)
摘要:$n$个位置,初始每个位置颜色都为$1$。 $m$次操作,每次给定$p,x$,计算当前有多少个位置颜色为$p$,并用答案计算出给定区间$[l,r]$,将$[l,r]$染色为$x$。 最后输出出现次数最多的颜色的出现次数。 阅读全文
posted @ 2020-09-30 10:21 SovietPower 阅读(168) 评论(2) 推荐(0)
摘要:无摘要.. 阅读全文
posted @ 2019-04-01 10:19 SovietPower 阅读(238) 评论(0) 推荐(0)
摘要:$n$次两种操作: 1. $x$:在集合(初始为空)中加入一个数$x$。 2. $x$:求当前集合中的数$\mathbb{mod}\ x$的最大值。 $n\leq10^5$。 阅读全文
posted @ 2019-01-27 13:04 SovietPower 阅读(204) 评论(0) 推荐(0)
摘要: 强制在线 阅读全文
posted @ 2018-09-28 17:37 SovietPower 阅读(150) 评论(0) 推荐(0)
摘要:给定长为$n$的序列,$m$次求区间众数,强制在线。 $n\leq40000,m\leq50000$。 阅读全文
posted @ 2018-02-27 20:03 SovietPower 阅读(193) 评论(0) 推荐(0)
摘要:"题目链接" $Description$ 长度为n的数列,m次询问,每次询问一段区间最大的 $A_i tm_i$ (重要度 出现次数) $Solution$ 好像可以用莫队做,但是取max的操作普通莫队是不好撤销的(Subd部分) 于是可以用不带删除的莫队: 回滚莫队 询问依旧是按(左端点所在块,右 阅读全文
posted @ 2018-02-27 15:50 SovietPower 阅读(338) 评论(0) 推荐(0)
摘要:给定一个长为$n$的序列,每次查询区间中出现次数$k1$小的数里面的$k2$小的数。卡空间。 $n,m\leq 40000$。 阅读全文
posted @ 2018-02-20 21:49 SovietPower 阅读(350) 评论(0) 推荐(0)
摘要:"题目链接" $Description$ 给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c。 $Solution$ 模拟一些数据可以发现,询问后一整段都会被修改,几次询问后数列可能只剩下几段不同的区间了。 那么还是暴力,每个块维护的是整个块是否仅被 阅读全文
posted @ 2018-02-20 11:34 SovietPower 阅读(306) 评论(0) 推荐(1)
摘要:"题目链接" 1.分块(vector)+重构 cpp //直接上vector(本机还是比较慢的...) 某块size较大时O(n)重构 //注意细节 include include include include define gc() getchar() define pb push_back t 阅读全文
posted @ 2018-02-20 09:52 SovietPower 阅读(360) 评论(1) 推荐(1)
摘要:"题目链接" int内的数(也不非得是int)最多开方4.5次就变成1了,所以还不是1就暴力,是1就直接跳过。 cpp include include include include define gc() getchar() typedef long long LL; const int N=5e 阅读全文
posted @ 2018-02-19 22:01 SovietPower 阅读(193) 评论(0) 推荐(0)
摘要:"题目链接" 阅读全文
posted @ 2018-02-09 13:29 SovietPower 阅读(176) 评论(0) 推荐(0)
摘要:"题目链接" cpp include include include include using namespace std; const int N=1e5+5; define LL long long int n,belong[N],size; LL A[N],sum[N],tag[N]; in 阅读全文
posted @ 2018-02-09 13:28 SovietPower 阅读(270) 评论(0) 推荐(0)
摘要:"题目链接" cpp include include include include using namespace std; const int N=1e5+5; int n,m,A[N],size,belong[N],sum[N]/ 某块的总和 /,tag[N]/ 某块的加标记 /; inlin 阅读全文
posted @ 2018-02-09 13:28 SovietPower 阅读(227) 评论(0) 推荐(0)
摘要:"题目链接" cpp / 如果用线段树,每个节点要再开k的空间,显然不行。但是分块可以(虽然空间依旧爆炸) 分块。用bloans[i][j]表示 第i块 模k为j 的有多少个 对于不是整块的,查询时应判断 A[i]+tag[belong[i]] ==k || ==0 对于整块,维护两个tag,一个是 阅读全文
posted @ 2018-02-09 13:25 SovietPower 阅读(321) 评论(0) 推荐(0)
摘要:"题目链接" cpp / 25832 kb 26964 ms 莫队+树状数组:增加/删除/查询 都是O(logn)的,总时间复杂度O(m sqrt(n) logn),卡不过 莫队+分块:这样查询虽然变成了sqrt(n),但是修改是O(1)的 考虑对权值进行分块 细节... / include inc 阅读全文
posted @ 2018-02-09 13:23 SovietPower 阅读(169) 评论(0) 推荐(1)
摘要:"题目链接" st(n)表示sqrt(n) 为使块状链表不会退化,通常将每块的大小S维持在[st(n)/2,2st(n)]中,这样块数C也一定[st(n)/2,2st(n)]中 在此使用另一种方法(方便)维持这种性质:保证任意相邻两块的size相加 st(n),并且每块大小 include incl 阅读全文
posted @ 2018-02-09 13:10 SovietPower 阅读(504) 评论(0) 推荐(0)
摘要:"题目链接" Update:这种分块写法...可以被卡掉啊... 好像没有靠谱的树分块写法... cpp / 对树上节点进行分块,每个点记录dep,fa,val,Max,Sum,Max,Sum表示当前点在该块内的子树中权值最大值与和 节点i各值表示从root[i]到i一段路径的的对应值。因为求值时应 阅读全文
posted @ 2018-02-09 13:08 SovietPower 阅读(203) 评论(0) 推荐(0)