[bzoj 3531][SDOI2014]旅行(树链剖分+动态开点线段树)

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3531

分析:

对于每个颜色(颜色<=10^5)都建立一颗线段树

什么!那么不是MLE了吗!

类似于主席树时候的操作,采用动态开点线段树,对于某个插入操作,从对应颜色的线段树根节点开始对应往下找,一但找到了空节点,则新建节点继续往下,知道元节点。

这样对于每个点,顶多开一条链

所以总的空间是nlogn的

对于原问题的几个操作,修改权值、询问和、询问最大值都是树链剖分的经典操作

还有个操作比较特殊,就是改变一个点的颜色。

这其实也很好办,设这个点颜色由A改为B,那么先在A线段树中把这个点对应的线段权值改为0,再在B线段树中把这个点对应的线段权值改为这个点的权值。

代码以后补……

posted @ 2015-03-24 22:11  Chellyutaha  阅读(206)  评论(0编辑  收藏  举报