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

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

摘要:给定长为n的序列Ai,求有多少个区间,满足区间中所有数的出现次数为奇数。 n2×105, Ai105阅读全文
posted @ 2021-09-11 18:03 SovietPower 阅读(234) 评论(0) 推荐(0) 编辑
摘要:给定一棵树,在树上每个点处有1个人,每个人有一个忍耐程度ti。当一个人子树内放假的人数>ti且他没有放假的时候,他会删库跑路。初始时所有人都没放假。有m次操作,每次将一个人由放假变为不放假或由不放假变为放假,然后输出一共有多少个人会删库跑路。 n,m105, 0tin阅读全文
posted @ 2021-05-11 11:40 SovietPower 阅读(95) 评论(0) 推荐(0) 编辑
摘要:维护一棵树,有两种操作: 1.Add x,y,插入一个节点,父节点为x边权为y。 2.Query x,y,查询起点为x,终点在y的子树中的最大简单路径边权异或和。 阅读全文
posted @ 2020-10-19 10:10 SovietPower 阅读(110) 评论(0) 推荐(0) 编辑
摘要:n个位置,初始每个位置颜色都为1m次操作,每次给定p,x,计算当前有多少个位置颜色为p,并用答案计算出给定区间[l,r],将[l,r]染色为x。 最后输出出现次数最多的颜色的出现次数。 阅读全文
posted @ 2020-09-30 10:21 SovietPower 阅读(155) 评论(2) 推荐(0) 编辑
摘要:无摘要.. 阅读全文
posted @ 2019-04-01 10:19 SovietPower 阅读(225) 评论(0) 推荐(0) 编辑
摘要:n次两种操作: 1. x:在集合(初始为空)中加入一个数x。 2. x:求当前集合中的数mod x的最大值。 n105阅读全文
posted @ 2019-01-27 13:04 SovietPower 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 强制在线 阅读全文
posted @ 2018-09-28 17:37 SovietPower 阅读(144) 评论(0) 推荐(0) 编辑
摘要:给定长为n的序列,m次求区间众数,强制在线。 n40000,m50000阅读全文
posted @ 2018-02-27 20:03 SovietPower 阅读(183) 评论(0) 推荐(0) 编辑
摘要:"题目链接" Description 长度为n的数列,m次询问,每次询问一段区间最大的 Aitmi (重要度 出现次数) Solution 好像可以用莫队做,但是取max的操作普通莫队是不好撤销的(Subd部分) 于是可以用不带删除的莫队: 回滚莫队 询问依旧是按(左端点所在块,右 阅读全文
posted @ 2018-02-27 15:50 SovietPower 阅读(312) 评论(0) 推荐(0) 编辑
摘要:给定一个长为n的序列,每次查询区间中出现次数k1小的数里面的k2小的数。卡空间。 n,m40000阅读全文
posted @ 2018-02-20 21:49 SovietPower 阅读(328) 评论(0) 推荐(0) 编辑
摘要:"题目链接" Description 给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c。 Solution 模拟一些数据可以发现,询问后一整段都会被修改,几次询问后数列可能只剩下几段不同的区间了。 那么还是暴力,每个块维护的是整个块是否仅被 阅读全文
posted @ 2018-02-20 11:34 SovietPower 阅读(301) 评论(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 阅读(338) 评论(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 阅读(184) 评论(0) 推荐(0) 编辑
摘要:"题目链接" 阅读全文
posted @ 2018-02-09 13:29 SovietPower 阅读(171) 评论(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 阅读(254) 评论(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 阅读(216) 评论(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 阅读(304) 评论(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 阅读(163) 评论(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 阅读(481) 评论(0) 推荐(0) 编辑
摘要:"题目链接" Update:这种分块写法...可以被卡掉啊... 好像没有靠谱的树分块写法... cpp / 对树上节点进行分块,每个点记录dep,fa,val,Max,Sum,Max,Sum表示当前点在该块内的子树中权值最大值与和 节点i各值表示从root[i]到i一段路径的的对应值。因为求值时应 阅读全文
posted @ 2018-02-09 13:08 SovietPower 阅读(189) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示