上一页 1 2 3 4 5 6 7 8 9 ··· 55 下一页
摘要: 对于一个给定的序列a1, …, an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用一个元素max(ai,ai+1)替代,这样得到一个比原来序列短的新序列。这一操作的代价是max(ai,ai+1)。进行n-1次该操作后,可以得到一个长度为1的序列。 我们的任务是计算代价 阅读全文
posted @ 2021-07-21 14:59 zlc0405 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 题意简述:给定n个点排成一排,每个点有一个点权,多次改变某个点的点权并将最大点独立集计入答案,输出最终的答案 定义f(i,0)为第i个数不取,定义f(i,1)为第i个数取。 转移式子: f(i,0)=max(f(i-1,0),f(i-1,1)) f(i,1)=max(f(i-1,0)+a[i]) 可 阅读全文
posted @ 2021-07-21 14:56 zlc0405 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 基础点分治。 点分治的模板基础上改一下即可。 询问树上长度模数是3的路径 //询问有多少路径的长度加起来是3的倍数 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+10; int n; vector<pair<int,i 阅读全文
posted @ 2021-07-20 13:57 zlc0405 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 每个节点上开一个cnti数组表示i这个数字出现了多少次,那么节点i上出现最多的数字就是cnt数组的最大值。 然后每次的操作可以调整为: 在u v上打一个+1的标记,在uv的lca上打一个-1的标记,在lca的父亲上打一个-1的标记。 然后打完标记后从叶子开始启发式的向上合并。 假设当前节点是u。 首 阅读全文
posted @ 2021-07-16 20:43 zlc0405 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 诸神眷顾的幻想乡 给出一棵树 叶子节点<=20 询问树上一共可能有多少个不同颜色序列 颜色值域<=10 这题有一个结论 从树的所有叶子节点为根开始搜,搜到的从根到节点的路径 包含树上所有叶子的路径 观察到叶子节点的数量<=20 那么就可以以每个叶子节点为根搜索,把搜到的路径 依次插入同一颗字典树内 阅读全文
posted @ 2021-07-15 23:44 zlc0405 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 研究了下概念,就学会了基于字典树的广义SAM构造方法。 北大带哥提出的别的高效构造完全不会了... SAM是基于字符串的,GSAM就是把lst换成字典树的上一个节点就行了。 #include<bits/stdc++.h> using namespace std; const int maxn=3e6 阅读全文
posted @ 2021-07-15 23:22 zlc0405 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 首先对每个位置处理出它作为右端点的最长子序列zz[i] 这个问题是老题 然后,每次区间询问就是求 max(i-max(l,i-zz[i]+1)+1) 这里注意到,i-zz[i]+1这玩意好像是单调不减的? 尝试证一下... 那么可以二分区间内第一个i-zz[i]+1大于l的位置p p前面半段的答案稳 阅读全文
posted @ 2021-07-15 21:26 zlc0405 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 对于t=0的情况: 在不同位置出现的子串算同一个子串,这里巨大的坑点是要把后缀自动机上除起点以外的所有点的sz置为1(不管它是虚拟节点还是真实节点),这一点萌新还没理解... 然后把所有节点按照len值从小到大排序,然后做一个倒着的转移,每个节点首先能转移出sz个子串,然后加上它后继节点的贡献,可以 阅读全文
posted @ 2021-07-15 20:12 zlc0405 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 给出一个序列,每次询问区间内出现次数恰好是k的元素个数。 //c[maxn]维护出现i次的数有多少 //cc[maxn]维护第i个数出现多少次 //然后莫队 #include<bits/stdc++.h> using namespace std; const int maxn=4e4+100; in 阅读全文
posted @ 2021-07-15 18:48 zlc0405 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 给出一个字符串。 请你找出所有出现次数恰好为k次的子串中,出现次数最多的子串长度。 先建出后缀自动机。 每个节点所代表的子串长度区间为len[link[i]]+1到len[i]。 每个节点所代表的子串出现次数是它的link树子树大小, 用差分数组维护一下。 //一个子串的出现次数= //它的link 阅读全文
posted @ 2021-07-15 16:21 zlc0405 阅读(24) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 55 下一页