随笔分类 - 1.————数据结构————
摘要:首先大概有一个树剖+树套树的做法,但我哪会写啊 然后发现k很小,如果用线段树记每个区间前k大的的话,可以O(k)地合并 而且一个点还有可能有好多个骑士,所以要用multiset维护一下 然后树剖就好啦
阅读全文
摘要:sbw巨佬的卡空间方法,把线段树的叶节点只记到长度为16的区间,然后在叶节点上暴力修改查询,这样点数是$\frac{N}{8}$的,可以过... orz
阅读全文
摘要:如果给相同的位置连边,最后联通块数是n,最后答案就是$9*10^{n-1}$ 但直接连边是$O(n^2)$的 所以事先处理出一个ST表,每次O(1)地给那个ST表连边 最后再一点一点下放,就是把在这层的同一集合的的左儿子连到一个里,右儿子连到一个里 统计最下面那一层的联通块数量就行了
阅读全文
摘要:直接建图边数太多,用线段树优化一下 然后缩点,记下来每个点里有多少个炸弹 然后按拓扑序反向dp一下就行了
阅读全文
摘要:首先想到建出可持久化trie树然后在上面贪心,但是它加了一个数所以不能这么做 但依然可以贪心,仿照上面那个的过程,如果设y是在第i位上^b是1的数(前面的位数已经贪好了),我只要在[l,r]范围内能有[y-x,y+(1<<i)-x-1)]的数,那这位异或出来就是可以是1的
阅读全文
摘要:对于一个区间四个角的点,可以用线段树记下来它们两两的联通情况 区间[l,r]通过两个子区间[l,m],[m+1,r]来更新,相当于合并[l,m],[m+1,r],用(m,m+1)这条边来合并 查询a,b答案的话,不仅可以直接从[a,b]区间连通,也有可能从旁边绕了一圈 总之细节很多 懒得写了 升级版
阅读全文
摘要:dfs序后用线段树来记每个节点的前缀和 每次找一个前缀和最大的节点,然后把它到根的路径上的每个之前没被走过的点 对应的dfs序的区间 减掉那个点的权值 每个点最多被减一次,复杂度是$O(nlogn)$的
阅读全文
摘要:把超级钢琴放到了树上。 这次不用主席树了..本来以为会好写一点没想到细节更多(其实是树上细节多) 为了方便,对每个点把他的那个L,R区间转化成两个深度a,b,表示从[a,b)选一个最小的前缀和(到根的和)减掉 为了更加方便,编号变为2~N+1,然后把2连到1上,1作为一个假根,权值为0 然后倍增去找
阅读全文
摘要:思路:先扫一遍所有点作为右端点的情况,把它们能产生的最大值加到一个优先队列里,然后每次从优先队列里取出最大值,再把它对应的区间的次大值加到优先队列里,这样做K次 可以用一个前缀和,每次找i为右端点的第K大时,就相当于找[i-R,i-L](可能有±2的偏差,会意)的第K小值,然后把它减掉 这个可以用主
阅读全文
摘要:先从大到小排序,看到哪个的时候安排不开了 给每个人拆成两个,如果x和y有矛盾,就给x和y‘、y和x’连边;如果a和b(或a'和b')在同一个集合里,说明他们一定要在同一个监狱里。
阅读全文
摘要:先用不管什么方法求出来从每个点出发,A走到哪、B走到哪(我写了一个很沙雕的STL) 然后把每个点拆成两个点,分别表示A从这里出发和B从这里出发,然后连边是要A连到B、B连到A、边长就是这次走的路径长度 为了方便,把不能继续走的点连到一个假节点1上(不连应该也无所谓) 然后我们预处理倍增,但要把A走的
阅读全文
摘要:Richard神犇出给nowcoder的题 用单调栈找到每个点它向右和向左的第一个大于或小于它的位置,然后它作为最大值/最小值的区间就要在这个范围里,那么它的贡献就是这个区间长度乘一乘再减一减 注意一下值相等的时候怎么处理
阅读全文
摘要:先考虑部分分(只有01/只有0~7)做法:枚举每个数,把和他相同的设为1,不同的设为-1,然后这个数作为众数贡献的个数就是区间和>0的个数 推着做,树状数组记前缀和<=x的区间的数量就可以,复杂度$O(8nlogn)$ 如果直接套过来,$O(n^2logn)$肯定是不行的,但可以发现枚举了所有数以后
阅读全文
摘要:离散化一下然后把姓名串和询问串都放一起做SA 和bzoj3277串类似地,满足某一询问的后缀(就是和这个询问对应的后缀的LCP>=这个询问长度的后缀)的排名也是一个区间,把这个区间二分出来即可 现在要做的两个问题就变成了: 给定一些区间、一些点,每个点有对应的颜色(就是sa[i]对应的那个姓名串对应
阅读全文
摘要:无修改、询问区间种类数的问题可以很容易地用树状数组解决 我们先给询问按右端点排序,然后推着做,每次让a[i]++,表示i处新增了一个种类 但是这样会和前面的有重复,我们只要记下每个种类上次在哪里出现过,当这次又出现了,把前面的那次减掉就可以了 每次处理完之后,就可以计算所有右端点为i的区间的答案,就
阅读全文
摘要:按照边权排序建出kruskal重构树,每次就变成了先找一个权值<=x的最远的祖先,然后看这个子树的第k小。离散化一下,在dfs序上做主席树即可 而且只需要建叶节点的主席树 注意输出的是第k小点的高度值
阅读全文
摘要:显然可以先把被覆盖掉的区间去掉,然后排个序,左、右端点就都是单调的 设f[i][j]表示前i个区间中删掉j个,而且钦定i不能删的最大覆盖长度 (如果不钦定,就要有一个删掉的状态,那我无法确定前面的到底到哪是没删的) 那么有$f[i][j]=max\{f[k][j-(i-k-1)]+R[i]-max(
阅读全文
摘要:我们先设f[i][j]表示长度为i,以j结尾的不降子序列个数,$f[i][j]=\sum{f[i-1][k]},A[k]<=A[j],k<j$,用树状数组优化一下可以$O(n^2logn)$求出来 然后我们让g[i]是长度为i的不降子序列的个数,答案就是$\sum{g[i]*(N-i)!-g[i+1
阅读全文
摘要:类似于NOI2018d1t1的离线做法,把询问存下来,排个序,然后倒着给并查集加边,每次询问并查集联通块大小
阅读全文
摘要:我们是想跑最短路的 我们有两种建图方式: 1.对于每个doge i,连向B[j]==B[i]+P[i]*k ,k=..,-2,-1,0,1,2,... ,边权=|k|,这样连的复杂度是$O(N\sum\limits_{i=1}^{m}\frac{1}{P[i]})$ 2.对于每个楼i,建max(P[
阅读全文

浙公网安备 33010602011771号