摘要: Query on a tree again!给出一棵树,树节点的颜色初始时为白色,有两种操作:0.把节点x的颜色置反(黑变白,白变黑)。1.询问节点1到节点x的路径上第一个黑色节点的编号。分析:先树链剖分,线段树节点维护深度最浅的节点编号。注意到,如果以节点1为树根时,显然每条重链在一个区间,并且区间的左端会出现在深度浅的地方。所以每次查找时发现左区间有的话,直接更新答案。99291512013-08-28 10:45:55Query on a tree again!100 editrun12.5427MC++4.3.2#include #include #include #include # 阅读全文
posted @ 2013-08-28 16:53 yejinru 阅读(651) 评论(0) 推荐(0) 编辑
摘要: GSS7Can you answerthese queries VII给出一棵树,树的节点有权值,有两种操作:1.询问节点x,y的路径上最大子段和,可以为空2.把节点x,y的路径上所有节点的权值置为c分析:修改树路径的信息,可以考虑一下树链剖分、动态树。这题可以用树链剖分的方式来做,不会的可以看看这篇树链剖分---模板。其实树链剖分不难理解,一小时左右就能学会了。对于在一段区间的最大子段和问题,可以参考GSS1 spoj 1043 Can you answer these queries I 最大子段和由于x,y可能不在同一个重链上,所以在询问时需要分两段进行统计,合并的时候跟GSS1基本一样 阅读全文
posted @ 2013-08-28 11:30 yejinru 阅读(528) 评论(0) 推荐(0) 编辑
摘要: GSS6Can you answer these queries VI给出一个数列,有以下四种操作:I x y: 在位置x插入y。D x : 删除位置x上的元素。R x y: 把位置x用y取替。Q x y: 输出区间[x,y]的最大字段和。分析:其实这题是BZOJ 1500 [NOI2005]维修数列这题的简化版。使用splay来做非常简单。我的做法增加一个虚拟节点在数列的最开始处,增加两个虚拟节点在最后,这是为了方便在数列最后插入的操作。splay网上的资料比较多,其实splay比sbt、avl都简单。这里有我的一份总结,并且有一些资料:splay总结囧,我写的splay太慢了,最后上网搜了 阅读全文
posted @ 2013-08-28 09:31 yejinru 阅读(355) 评论(0) 推荐(0) 编辑