http://codeforces.com/contest/380/problem/C
题目大意:给定一个括号序列,给出一个询问\(l\)和\(r\),回答\(l\)到\(r\)这个范围内,最长的合法子序列是多长
经过观察,这个题目符合区间合并性。 \[w[Total].len=w[Left].len+w[Right].len+min(w[Left].open+w[Right].closed)\] \[w[Total].open=w[Left].open+w[Right].open-min(w[Left].open+w[Right].closed)\] \[w[Total].closed=w[Left].closed+w[Right].closed-min(w[Left].open+w[Right].closed)\] 这样就可以用线段树来维护。
1 |
|
http://codeforces.com/contest/383/problem/C
题目大意:对一个节点加一个值\(val\),其每一个子节点都要减去值\(val\),向下不断传导,直到没有子节点。给出修改和查询,输出查询的答案。
根据层数的奇偶性,对dfs序建立两个树状数组(或者线段树),因为dfs序的子树处于同一区间,所以就是区间修改,单点查询。
1 |
|
http://codeforces.com/contest/414/problem/C 这题基本给定个一个归并的阶段。所以用归并排序求一下逆序数,然后翻转的话,就是整个层以及层以下都翻转(正序变成逆序,逆序变成正序),所以记录一下每一层的正序数、逆序数,暴力维护即可。
1 |
|
http://codeforces.com/contest/282/problem/E 用trie树进行贪心,第一次接触到这种东西
1 |
|