偷了一个题表来作,当作康复训练了23333ios
代码在这里git
【2018.7.3】github
【2018.7.4】数组
单调栈处理\(a_i\)做为最小值的范围延伸长度记为\(l_i,r_i\),函数
发现性质,对每一个\(a_i\)讨论对长度k区间的最小值和的贡献spa
贡献是\(a_i * \min(l_i+1,\ r_i+1,\ k,\ l_i+r_i+2-k)\)code
而后发现有区间加常数和区间加等差数列两种操做,二次差分排序
PS:1.注意讨论get
2.iostream真是慢,要std::ios::sync_with_stdio(false)才行
CF459D
裸二维偏序,预处理 + 树状数组,用后缀和bit也能够
答案就是最大长*最大宽
变成一维问题,加入点、求当前相邻点最大差值
平衡树处理线段问题,插入、找前驱后继,能够用set
再用个map或者multiset来作删除、插入、求最大值,map居然更快2333
set/map小笔记:内部是平衡树,用<定义的; 迭代器能够++ —, insert返回pair(迭代器,bool),multi的话返回迭代器.
classical的dp,\(f_i\)表示拼出s[1,i]上一步用了哪一个单词,枚举单词长度来转移,复杂度O(n*1000)
而后个人哈希一直冲突冲突冲突........因而写了trie
单词建trie,对主串每一位都跑1000长度
【2018.7.5】
CF339D
线段树,单点修改,查询根 2333
CF527D
classical 区间覆盖不重叠贪心
P3043 [USACO12JAN]Bovine Alliance
树的贡献是n,一个环的贡献是2,有其余的就无解
并查集维护
树的同构 自底向上哈希,对每一个点,孩子节点哈希值排序再哈希起来构成本身的哈希值
对于本题,若u、v加一个新点后同构,则u、v彻底等价,u、v分别为根时哈希值相等
加上记忆化后复杂度分析:由于度数<=4,因此对于一个点不一样的哈希值最多4种
由于哈希冲突留下了内心阴影,因而学了hzwer的一个技巧,直接给vector分配哈希值(也是利用了度数小)