随笔分类 -  数据结构-线段树

摘要:题目链接 第一种方法,dfs序上建可持久化线段树,然后询问的时候把两点之间的所有树链扒出来做差。 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N=1e5+10,inf=0x3 阅读全文
posted @ 2019-03-26 16:24 jrltx 阅读(280) 评论(0) 推荐(0)
摘要:题目链接 设白色结点为未安装的软件,黑色结点为已安装的软件,则: 安装软件i:输出结点i到根的路径上的白色结点的数量,并把结点i到根的路径染成黑色。复杂度$O(nlog^2n)$ 卸载软件i:输出结点i子树下的黑色结点数量,并把结点i的子树染成白色。复杂度$O(nlogn)$ 阅读全文
posted @ 2019-03-26 08:15 jrltx 阅读(207) 评论(0) 推荐(0)
摘要:题目链接 线段树维护区间连续段个数即可。设lc为区间左端点颜色,rc为区间右端点颜色,则合并两区间的时候,如果左区间右端点和右区间左端点颜色相同,则连续段个数-1。 在树链上的区间合并可以定义一个结构体作为线段,分成左右两条链暴力合并。也可以考虑到树上的路径中每两个树链“断开”的地方必然有一个结点是 阅读全文
posted @ 2019-03-25 21:44 jrltx 阅读(228) 评论(0) 推荐(0)
摘要:题目链接 阅读全文
posted @ 2019-03-23 15:36 jrltx 阅读(199) 评论(0) 推荐(0)
摘要:给定一个图,支持三种操作: 1.删除一条边 2.查询与x结点相连的第k大的结点 3.修改x结点的权值 解法:离线倒序操作,平衡树or线段树维护连通块中的所有结点信息,加个合并操作就行了。 感觉线段树要好写很多。 平衡树(Treap)版: 1 #include<bits/stdc++.h> 2 typ 阅读全文
posted @ 2019-01-25 14:51 jrltx 阅读(268) 评论(0) 推荐(0)