03 2018 档案
摘要:裸裸的题目 但是按之前的搞法 重叠的边(cnt >= 2)在线段树里面有没有更新到子树 所以在线段树更新里面重了两个update 时间复杂度退化了 时间有点慢 太菜了。。。 1 #include <bits/stdc++.h> 2 #include <string.h> 3 #include <io
阅读全文
摘要:扫面线从下往上扫 将横坐标离散化 用线段树来进行区间更新 维护两个值cnt 和对应的有效的边(cnt>0)的长度 当有一个矩阵的下底边扫过的时候 对应的区间cnt+1 否则 对应的区间cnt-1 每次计算cnt > 0的区间长度 不会存在cnt < 0 的区间 因为上边扫描过之前必先扫描下底边 需要
阅读全文
摘要:dp[l][r]记录中序序列为l, l+1..r的最大加分值 root[l][r]记录这个序列的根节点 转移 i 为根节点 dp[l][r] = max(dp[l][i-1]*dp[l+1][r]+a[i], dp[l][r]) 顺势更新root[l][r] 1 #include <bits/std
阅读全文
摘要:对于不常用hash的cj来说一定要背熟kmp啊 //plagiarized from Kuangbin
阅读全文
摘要:每一行对话分别取匹配所有的表情 这样是一个n**2的匹配,可以用KMP 找出每行对话中的每个表情的左右端点 这样相当于就是问用最少多少个点 可以覆盖所有的区间(每个区间中放一个点表示覆盖) 贪心 按右端点升序排列 相同时左端点也升序(这里其实没有影响但是 按照匹配上来讲 应该按照升序) --理由:
阅读全文
摘要:问有多少个这样的数字序列 所有数的GCD等于x 并且 所有数的和等于y 题解: 非常难有思路啊 看题解后过的。 考虑序列GCD为x的倍数 即GCD = n*x 和当然都为y 这个条件不要忘了 这样我们可以用 容斥原理来递推的计算GCD为n*x的序列个数是多少 怎么计算呢 以样例为例子 3 9 当GC
阅读全文