摘要:
竟然还涨分了。。。rank500+还能涨我rating是有多低。。。 AB不写了 C:类似找规律,具体证明看edtorial #include<bits/stdc++.h> using namespace std; const int N = 200010; int m; struct data { 阅读全文
摘要:
背包+fft 既然要不选一个东西,那么我们求出前缀背包和后缀背包,每次答案就是f[i-1][w]*g[i+1][j-w] 但是这样复杂度还是n^3,跑不过,但是我们发现上面那个东西不就是个裸卷积吗,直接上fft,但是wa了... wa的程序,大概是精度问题吧 #include<bits/stdc++ 阅读全文
摘要:
哈希+拓扑排序 题意比较绕,先开始没看懂就看了发程序,发现好像理解的不太一样,后来找到了一个题目解释。。。 摘自jcvb:其实就是说颜色相同且三个出口分别对应相同(注意有可能是合并后才相同)两个结点是相同的,可以合并,求最后合并完后剩下几个结点。 所以我们倒着计算一个房间是否和以前相同,因为有可能合 阅读全文
摘要:
LCT 昨天调试一天没出来,今天推倒重写还是gg了,内心崩溃照着源代码抄,结果发现自己把原树fa和splay的fa一起维护,各种re。。。 其实我们手玩一下,发现其实树的形态变化很小,那么就可以用lct维护了,查询就是相当于查询点到root的点权和,点权为1 删除什么的手画一下就行了 然后我们要用一 阅读全文
摘要:
树的直径 我先开始以为是个图,想想并不知道什么求图的直径的方法,结果是棵树 那么直觉告诉我们是在直径上面,实际上就是直径+min(i->u,i->v),扫一遍就行了 #include<bits/stdc++.h> using namespace std; const int N = 200010; 阅读全文
摘要:
单调栈 其实是单调栈的变种 维护up,left,right,表示一个点能向左向右向上最大扩展距离,ans就是最大的left*rigth*up up[i][j]=Map[i-1][j]==1?1:Map[i-1][j]+1 left和right 用单调栈求,每次碰见障碍就把栈中元素弹出,栈中元素左端点 阅读全文
摘要:
splay维护dfs序 我们发现有移动子树这种操作,树剖是做不了了,又要实现子树加,lct又维护不了了,这时我们用splay维护入栈出栈序来支持这些操作。我们记录每个点的入栈时间和出栈时间,这样一个闭合的区间就表示了一个节点的子树,于是我们可以支持更换父亲了。然后是子树加,这里我们把要加的区间提取出 阅读全文
摘要:
LIS+贪心 因为是要字典序尽量的小,但是如果我们从头做,就无法判断选了这个是否能够>=l,那么我们倒着跑一遍LDS,然后每次从尾部贪心,如果这个能选就选,判断标准是cnt+dp[i]>=l,就是已经选的加上这个的LDS比L大就是可以选。 #include<bits/stdc++.h> using 阅读全文
摘要:
搜索 。。。大家都说这是水题。。。我没做出来。。。因为我以为分割不一定要等分 事实上每次切割都要分成当前需要块数的整数倍,比如说需要分成k块,那么肯定只能在k,2k,3k这里切,否则两边不成整数比,因为我们要把当前分成k块,所以只能这样切,然后就好做了,枚举分割点,横着竖着爆搜。 #include< 阅读全文
摘要:
AC自动机+dp+矩阵乘法 我们先对串建立AC自动机,然后进行dp+矩阵乘法。AC自动机加上trie图优化,root的每个儿子如果没有就都填上,然后建立矩阵,mat[child[u][i]][u]=1,如果在trie图上child[u][i]是u的儿子,并且u和儿子都不是危险节点,然后初始值是dp[ 阅读全文