算法:线段树、(平衡树?) 板子题,不多做评价。但是开发空间很大,我的写法在洛谷题解上没找到,导致当时想贺题解没贺成。 算法:线段树、树状数组、分块、(CDQ分治?) 二维偏序板子,开发空间极大,想怎么写就怎么写。 算法:线段树、分块 线段树维护子区间信息板子,类比山海经,由于时限不严,分块也可写。 算法:平衡树 平衡树板子,Coner Case较多,比如找完前驱要Splay一下。数据加强可以更好检验算法的正确性。 算法:树链剖分+线段树 算是树剖板子了吧,由于树剖维护的是点信息,所以需要边权转点权。注意询问的两个点一定相邻。 算法:树链剖分+线段树 树剖还是板子,但是线段树维护比较复杂。边权转点权这步不变,对于不同次的重边染上不同的颜色,合并时如果两个儿子的合并边界颜色不同则证明中间有条边是“重转轻”,减去答案即可。 算法:dfs+线段树合并(+离散化?) 线段树合并板子题,对每一个点开一个权值线段树,对于父亲节点直接把儿子的线段树合并过来即可,需要动态开点,可以不离散化和回收节点。 算法:主席树、操作树+线段树 比较离谱的trick。正常树剖是在dfs序上开线段树,本题需要在bfs序上开线段树,由于同一深度的节点bfs差越大距离越远,有单调性,可以二分找到查询的答案。注意二分这里有不少Coner Case,比较难调。回溯用主席树或操作树都行。 算法:线段树+离散化、线段树+动态开点、珂朵莉树、(分块+离散化?) 注意到区间赋值,于是想到珂朵莉树,所以这题就成了珂朵莉树板子。注意由于CF大佬的Hack,答案需要在修改时预处理出来,以达到 \(O(1)\) 的查询复杂度。当然,这种题目理论上线段树和分块写写也能过,但是不如珂朵莉树好写。 算法:动态规划+线段树 线段树优化dp,尝试设计状态,设 \(dp[i][j]\) 表示考虑了前 \(i\) 个村庄已经放了 \(j\) 个基站且这个位置放基站的最小花费,则有 \(dp[i][j]=min(dp[k][j-1]+calc(k,i)),k\in[1,i-1]\)。由于有取min且转移和 \(i\) 的位置有关,考虑使用线段树优化,把 \(calc(k,i)\) 拆开,对一个位置预处理能覆盖它的第一个和最后一个村庄,然后根据 \(i\) 判断修改和查询的区间。注意dp数组存的不是最终答案,另外还要把 \(j\) 提到第一层循环。A. 线段树分裂
B. 三元上升子序列
C. STEP
D. 普通平衡树(数据加强版)
E. Grass Planting G
F. 轻重边
G. Promotion Counting P
H. History
J. Physical Education Lessons
W. 基站选址