水题练习 1
做题笔记 1
hzwer 数据结构杂题选讲(14/16)
偷了一个题表来做,当做康复训练了23333
【2018.7.3】
- CF140C 贪心、排序
- CF519B 离散化 / 排序
- CF650A 排序 (注意比较函数写法不好会导致sort死掉)
- CF466C 裸一维偏序
- CHSEQ22 差分、并查集 类似线性空间
- CF460C 二分答案、贪心
【2018.7.4】
-
单调栈处理\(a_i\)作为最小值的范围延伸长度记为\(l_i,r_i\),
发现性质,对每个\(a_i\)讨论对长度k区间的最小值和的贡献
贡献是\(a_i * \min(l_i+1,\ r_i+1,\ k,\ l_i+r_i+2-k)\)
然后发现有区间加常数和区间加等差数列两种操作,二次差分
PS:1.注意讨论
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,有其他的就无解
并查集维护
-
[CF718D. Andrew and Chemistry](D. Andrew and Chemistry)
树的同构 自底向上哈希,对每个点,孩子节点哈希值排序再哈希起来构成自己的哈希值
对于本题,若u、v加一个新点后同构,则u、v完全等价,u、v分别为根时哈希值相等
加上记忆化后复杂度分析:因为度数<=4,所以对于一个点不同的哈希值最多4种
因为哈希冲突留下了心里阴影,于是学了hzwer的一个技巧,直接给vector分配哈希值(也是利用了度数小)