随笔分类 - 高级数据结构——分块 块状树 块状链表
摘要:给定一棵树,在树上每个点处有个人,每个人有一个忍耐程度。当一个人子树内放假的人数且他没有放假的时候,他会删库跑路。初始时所有人都没放假。有次操作,每次将一个人由放假变为不放假或由不放假变为放假,然后输出一共有多少个人会删库跑路。
。
阅读全文
摘要:无摘要..
阅读全文
摘要:
强制在线
阅读全文

摘要:"题目链接" 长度为n的数列,m次询问,每次询问一段区间最大的 (重要度 出现次数) 好像可以用莫队做,但是取max的操作普通莫队是不好撤销的(Subd部分) 于是可以用不带删除的莫队: 回滚莫队 询问依旧是按(左端点所在块,右
阅读全文
摘要:"题目链接" 给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c。 模拟一些数据可以发现,询问后一整段都会被修改,几次询问后数列可能只剩下几段不同的区间了。 那么还是暴力,每个块维护的是整个块是否仅被
阅读全文
摘要:"题目链接" 1.分块(vector)+重构 cpp //直接上vector(本机还是比较慢的...) 某块size较大时O(n)重构 //注意细节 include include include include define gc() getchar() define pb push_back t
阅读全文
摘要:"题目链接" int内的数(也不非得是int)最多开方4.5次就变成1了,所以还不是1就暴力,是1就直接跳过。 cpp include include include include define gc() getchar() typedef long long LL; const int N=5e
阅读全文
摘要:"题目链接"
阅读全文
摘要:"题目链接" 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
阅读全文
摘要:"题目链接" 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
阅读全文
摘要:"题目链接" cpp / 如果用线段树,每个节点要再开k的空间,显然不行。但是分块可以(虽然空间依旧爆炸) 分块。用bloans[i][j]表示 第i块 模k为j 的有多少个 对于不是整块的,查询时应判断 A[i]+tag[belong[i]] ==k || ==0 对于整块,维护两个tag,一个是
阅读全文
摘要:"题目链接" cpp / 25832 kb 26964 ms 莫队+树状数组:增加/删除/查询 都是O(logn)的,总时间复杂度O(m sqrt(n) logn),卡不过 莫队+分块:这样查询虽然变成了sqrt(n),但是修改是O(1)的 考虑对权值进行分块 细节... / include inc
阅读全文
摘要:"题目链接" st(n)表示sqrt(n) 为使块状链表不会退化,通常将每块的大小S维持在[st(n)/2,2st(n)]中,这样块数C也一定[st(n)/2,2st(n)]中 在此使用另一种方法(方便)维持这种性质:保证任意相邻两块的size相加 st(n),并且每块大小 include incl
阅读全文
摘要:"题目链接" Update:这种分块写法...可以被卡掉啊... 好像没有靠谱的树分块写法... cpp / 对树上节点进行分块,每个点记录dep,fa,val,Max,Sum,Max,Sum表示当前点在该块内的子树中权值最大值与和 节点i各值表示从root[i]到i一段路径的的对应值。因为求值时应
阅读全文