随笔分类 - 高级数据结构——分块 块状树 块状链表
摘要:给定长为$n$的序列$A_i$,求有多少个区间,满足区间中所有数的出现次数为奇数。
$n\leq 2\times10^5,\ A_i\leq 10^5$。
阅读全文
摘要:给定一棵树,在树上每个点处有$1$个人,每个人有一个忍耐程度$t_i$。当一个人子树内放假的人数$\gt t_i$且他没有放假的时候,他会删库跑路。初始时所有人都没放假。有$m$次操作,每次将一个人由放假变为不放假或由不放假变为放假,然后输出一共有多少个人会删库跑路。
$n,m\leq10^5,\ 0\leq t_i\leq n$。
阅读全文
摘要:维护一棵树,有两种操作:
1.Add x,y,插入一个节点,父节点为$x$边权为$y$。
2.Query x,y,查询起点为$x$,终点在$y$的子树中的最大简单路径边权异或和。
阅读全文
摘要:$n$个位置,初始每个位置颜色都为$1$。
$m$次操作,每次给定$p,x$,计算当前有多少个位置颜色为$p$,并用答案计算出给定区间$[l,r]$,将$[l,r]$染色为$x$。
最后输出出现次数最多的颜色的出现次数。
阅读全文
摘要:$n$次两种操作:
1. $x$:在集合(初始为空)中加入一个数$x$。
2. $x$:求当前集合中的数$\mathbb{mod}\ x$的最大值。
$n\leq10^5$。
阅读全文
摘要:
强制在线
阅读全文
强制在线
阅读全文
摘要:给定长为$n$的序列,$m$次求区间众数,强制在线。
$n\leq40000,m\leq50000$。
阅读全文
摘要:"题目链接" $Description$ 长度为n的数列,m次询问,每次询问一段区间最大的 $A_i tm_i$ (重要度 出现次数) $Solution$ 好像可以用莫队做,但是取max的操作普通莫队是不好撤销的(Subd部分) 于是可以用不带删除的莫队: 回滚莫队 询问依旧是按(左端点所在块,右
阅读全文
摘要:给定一个长为$n$的序列,每次查询区间中出现次数$k1$小的数里面的$k2$小的数。卡空间。
$n,m\leq 40000$。
阅读全文
摘要:"题目链接" $Description$ 给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c。 $Solution$ 模拟一些数据可以发现,询问后一整段都会被修改,几次询问后数列可能只剩下几段不同的区间了。 那么还是暴力,每个块维护的是整个块是否仅被
阅读全文
摘要:"题目链接" 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一段路径的的对应值。因为求值时应
阅读全文

浙公网安备 33010602011771号