
线段树
文章平均质量分 54
Drin_E
中山纪念中学的蒟蒻,乐于交友
展开
-
雨天的尾巴
题目大意给定一棵n个点的树。有m个操作,每个操作给出x,y,z,然后对于点x 到点y 的路径上(含x 和y) 每个点对应数值为z的数的个数+1。 最后输出每个点个数最多的数的数值(个数相同输出数值较小值)。数据范围 n,m <= 100000,z<=10^9。树链剖分,复杂度O(nlogn2n log n^2)(werkeytom大神用线段树合并O(n log n)解决) z比较大,但最多也就m原创 2016-05-25 18:33:09 · 551 阅读 · 0 评论 -
K 大数查询
题目大意有N个集合,初始为空。有M个操作, 修改操作:编号范围在l~r的集合都加入一个数值为a的数, 询问操作:编号范围在l~r的集合数值为第k大的数。 n,m<=50000,|a|<=n,k树套树当然可行,但我不会考虑离线——整体二分L,R表示数值的区间,mid=(L+R)/2。 用线段树维护在编号范围在l~r的集合中数值范围在mid+1~R的数的个数 修改操作的a的数值若>mid则编原创 2016-05-15 12:05:05 · 468 阅读 · 0 评论 -
Binary
题目大意拆位涉及位运算的操作,通常需要拆位,不过这题稍有不同,因为括号里有个+x的操作。 我们可以把a[i]%2^i后加入第i个线段树里(权值线段树),然后对于一个&y的操作,我们就可以只考虑y的二进制下有1的位。 先忽略x 假如这一位为10000 那么找到对应的线段树,查询10000~11111的个数,我们就可以得到贡献了。 那么有x操作,naive的想法就是查询max(0,10000-原创 2016-08-17 17:10:39 · 646 阅读 · 0 评论 -
UOJ【清华集训2015】V
题目大意初始给出n个数,a[1]~a[n] 有m个操作 1,把a[l]~a[r]加上x 2,把a[l]~a[r]减去x后和0取max 3,把a[l]~a[r]和x取max 4,输出a[x] 5,输出a[x]的历史最大值(即出现过的值的最大值)数据范围,n,m<=5*10^5,x<=10^9设计标记令标记(a,b)表示对于x进行max(x+a,b)那么 操作1相当于(x,-inf) 2原创 2017-04-18 22:12:46 · 737 阅读 · 0 评论