摘要:
脑子一抽开始写主席树,敲了一会发现不对…… 整体二分,用二维树状数组维护值为当前区间的格子个数,然后根据k的大小和当前询问的子矩阵里的值和k的大小关系来决定这个询问放在哪一部分向下递归 cpp include include include using namespace std; const in 阅读全文
摘要:
看着就像反演,所以先推式子(默认n include using namespace std; const int N=5000005,mod=1e9+7; int T,k,n,m,p[N],tot,s[N],f[N],sm[N],ans; bool v[N]; int read() { int r= 阅读全文
摘要:
SA的话t==0直接预处理出每个后缀的不同串贡献二分即可,然后t==1就按字典序枚举后缀,然后跳右端点计算和当前后缀的前缀相同的子串个数,直到第k个 不过bzoj上会T cpp include include include using namespace std; const int N=1000 阅读全文
摘要:
对第一个串建SAM,把剩下的串在上面跑,每次跑一个串的时候在SAM的端点上记录匹配到这的最大长度,然后对这些串跑的结果取min,然后从这些节点的min中取max就是答案 注意在一个点更新后它的祖先也会被更新,需要最后按拓扑序向上更新一边 其实二分+hash就行 cpp include include 阅读全文
摘要:
首先看两条链怎么合并,贪心可得是从大到小取max,多条链同理 所以dfs合并子树的大根堆即可,注意为了保证复杂度,合并的时候要合并到最长链上,证明见长链剖分 cpp include include include using namespace std; const int N=200005; in 阅读全文
摘要:
A题意:给定字符串s,求无重复字符子序列个数(子序列相同位置不同算不同) 在最后加一串a~z表示选了这些就是不选这个字符了,然后答案就是每次选每个字符位置的方案数的积 cpp include include using namespace std; const int N=100005,mod=1e 阅读全文