①查找节点后继中权值小于该节点权值的节点个数:HDU 3887
题意:给出一棵树,对每个节点i,求节点i的后继节点中权值小于i的个数。
思路:dfs序+线段树or树状数组。先dfs遍历整棵树,记录每个节点的子树对应的区间(即【in[i],out[i]】),然后建立线段树,每个叶子节点的权值设置为1,维护节点权值之和,从大到小开始找,查询完成之后,删除该节点,即权值设为0,因为值较大的节点删除之后对值较小的节点没有影响。
②经典区间覆盖问题(涂色):Zju1610 Count the Colors
题意:画一些颜色段在一行上,一些较早的颜色就会被后来的颜色覆盖了。 你的任务就是要数出你随后能看到的不同颜色的段的数目。
思路:不能直接更新点,考虑以下数据(1,2,1) (2,4,2) (3,4,3)(1,2,1),最后每个点的颜色为1 1 3 3,只有2个颜色,忽略了开区间(2,3)的颜色
以每个点代表其左边单位区间的颜色,当对(a,b)区间进行染色时,只需要更新(a+1,b)即可。另外注意题目数据范围,不是1-n,而是1-8000.