
主席树
WerKeyTom_FTD
这个作者很懒,什么都没留下…
展开
-
[NOIP2015]推销员
题目大意现有长度为N的两个数组a和s 有N个询问,第i个询问你需要找出一个i使得s[i]*2+a[i]+1..i-1中a数组前i-1大的值之和最大。整体二分注意到每个询问找出的那个最优的i是满足单调性的 因此可以对所有询问整体二分 用solve(l1,r1,l2,r2)表示当前处理第l1~r1个询问,他们最优的i范围在l2~r2。 令mid1=(l1+r1)/2,我们在l2~r2则找,看看那原创 2015-11-14 13:31:58 · 1892 阅读 · 2 评论 -
[bzoj3585]mex
题目大意求区间mex主席树我们建立主席树,对于第r棵线段树每一个位置i存储的是数字i出现的最右端。 那么对于区间询问l~r,就是找到第r棵线段树的最大前缀区间,满足区间内每个数的最右出现位置都不小于l。 这个很容易,我们只需要维护区间最小值,询问时如果左区间的区间最小值小于l说明mex在左区间否则mex在右区间。 于是复杂度降为n log n。#include<cstdio>#include原创 2016-03-24 21:45:54 · 2065 阅读 · 0 评论 -
JZOJ4444
题目大意询问树上两点的路径上小于/等于/大于所给定值k得点的数量(每次询问k不一定相同) 强制在线主席树以计算小于k为例: u到v的路径上小于k的点的数量=>u到根节点小于k的点的数量+v到根节点小于k的点的数量-2*lca(u,v)到根节点小于k的点的数量+lca(u,v)的权值是否小于k 然后裸的主席树#include<cstdio>#include<algorithm>#includ原创 2016-04-15 18:32:16 · 1001 阅读 · 0 评论 -
[bzoj4826][HNOI2017]影魔
题目描述影魔,奈文摩尔,据说有着一个诗人的灵魂。事实上,他吞噬的诗人灵魂早已成千上万。千百年来,他收集了各式各样 的灵魂,包括诗人、牧师、帝王、乞丐、奴隶、罪人,当然,还有英雄。每一个灵魂,都有着自己的战斗力,而影魔,靠 这些战斗力提升自己的攻击。奈文摩尔有 n 个灵魂,他们在影魔宽广的体内可以排成一排,从左至右标号 1 到 n。 第 i个灵魂的战斗力为 k[i],灵魂们以点对的形式为影魔提供原创 2017-04-19 16:22:09 · 1401 阅读 · 0 评论 -
Create
题目大意一个序列,有很多询问,每个询问要问区间>=x的数的个数。 现有若干修改操作,区间赋值,每次修改后请你将所有询问得到的答案和输出。颜色段均摊分析颜色段! 可以用set维护颜色段。 然后只需要考虑一个区间全部由x变成y产生代价。 先把询问按x排序做可持久化线段树,然后就很好做。#pragma GCC optimize(2)#include<cstdio>#include<algori原创 2017-08-17 19:16:09 · 523 阅读 · 0 评论 -
Sequence
题目大意有两个序列a和b。 每次询问将一个区间a值排名在[x,y]的中找一个b值第k小。做法用主席树将排名的x和y变成具体的值。 接下来可以根据b整体二分,其余部分可以拆区间+扫描线+数据结构完成。#pragma GCC optimize(2)#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)usi原创 2017-08-17 19:20:58 · 473 阅读 · 0 评论 -
[agc003e]Sequential operations on Sequence
前言利用了经典性质的题。题目大意有一个数字串S,初始长度为n,是1 2 3 4 …… n。 有m次操作,每次操作给你一个正整数a[i],你先把S无穷重复,然后把前a[i]截取出来成为新的S。 求m次操作后,每个数字在S中出现的次数。做法考虑这样一个过程,solve(x,l)表示在第x次操作后的S的前l位,我们希望获取每个数在这里面的出现次数(这个函数返回一个数组)。 不妨设S[i]表示第i次操原创 2017-10-27 10:12:21 · 1032 阅读 · 0 评论