随笔分类 -  ICPC-数据结构

摘要:给一个有根树,1e5个节点,每个节点有权值0/.1,1e5操作:1.将一个点的子树上所有点权值取反2.查询一个点的子树的权值和 题解: 先深搜整颗树,用dfs序建立每个点对应的区间,等于把树拍扁成一个数列,每次操作从就对点变成了对区间然后就是裸线段树 注意拍扁后的节点标号和原来的树节点标号是不等价的 阅读全文
posted @ 2019-01-06 19:20 nervending 阅读(323) 评论(0) 推荐(0)
摘要:题意: 两个操作, 单点修改 询问一段区间是否能在至多一次修改后,使得区间$GCD$等于$X$ 题解: 正确思路; 线段树维护区间$GCD$,查询$GCD$的时候记录一共访问了多少个$GCD$不被X整除的区间即可,大于一个就NO 要注意的是,如果真的数完一整个区间,肯定会超时,因此用一个外部变量存储 阅读全文
posted @ 2019-01-06 07:20 nervending 阅读(318) 评论(0) 推荐(0)
摘要:题目 https://codeforces.com/problemset/problem/38/G 题意: 一些人按顺序进入队列,每个人有两个属性,地位$A$和能力$C$ 每个人进入时都在队尾,并最多可以和前一位互换$C$次,如果前一位的地位高于自己,则无法继续互换. 最终一次性输出整个队列 题解: 阅读全文
posted @ 2019-01-06 05:41 nervending 阅读(357) 评论(0) 推荐(0)
摘要:链接:https://codeforces.com/problemset/problem/675/D 题意: 给一个二叉搜索树,一开始为空,不断插入数字,每次插入之后,询问他的父亲节点的权值 题解: 由二叉搜索树的有序性质, 他的父亲节点一定是和他向上和向下最接近的两个中,最后插入的那一个 那么我们 阅读全文
posted @ 2019-01-05 17:31 nervending 阅读(324) 评论(0) 推荐(0)
摘要:题意:实现一种数据结构,支持对一个数列的 6 种操作:第 x 个数到第 y 个数之间的数每个加 D;第 x 个数到第 y 个数之间全部数翻转;第 x 个数到第 y 个数之间的数,向后循环流动 c 次,即后面 c个数变成这段子序列的最前面 c 个,前面的被挤到后面。在第 x 个数后面插入一个数 P。删 阅读全文
posted @ 2019-01-04 01:46 nervending 阅读(196) 评论(0) 推荐(0)
摘要:题意: 现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。 2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将 阅读全文
posted @ 2019-01-02 22:12 nervending 阅读(198) 评论(0) 推荐(0)
摘要:题意: 一个$01$串,一开始全为$1$, $3$种操作: $D x$ 把$a_x$修改为$0$ $Q x$ 询问包含位置$x$的最长$1$串的长度 $R $ 撤销最近一次的$D x$操作 题解:线段树 每个节点维护$3$个区间信息 最长的连续$1$,.最长的前缀$1$,最长的后缀$1$ 然后进行单 阅读全文
posted @ 2018-12-31 20:57 nervending 阅读(212) 评论(0) 推荐(0)
摘要:https://www.nowcoder.com/acm/contest/201#question 题意:中文不翻译了 解法的个人理解: 对于一个合法的区间$[L,R]$ 1.显然其左括号的匹配位置都小于等于$R$,其右括号的匹配位置都大于等于$L$, 2.左括号和右括号数量相同 3.区间的长度为偶 阅读全文
posted @ 2018-10-02 00:35 nervending 阅读(243) 评论(0) 推荐(0)
摘要:题意: 给一个集合,多次询问,每次给一个k,问你集合和k异或结果最大的哪个 题解: 经典的01字典树问题,学习一哈. 把一个数字看成32位的01串,然后查找异或的时候不断的沿着^为1的路向下走即可 acdream 1063 代码 阅读全文
posted @ 2018-09-20 17:14 nervending 阅读(144) 评论(0) 推荐(0)
摘要:题意: 给一个数列,一些询问,问你区间$[l.r]$大于$K$的个数 题解: 又一个"人尽皆知傻逼题"? 我们用一个01序列表示当前询问时,该位置的数字是否对答案有贡献, 显然,对于询问$(l,r,k)$整个区间只有大于$k$的数字对答案有贡献, 那么离线思路就有了 按k排序询问,排序数字,遍历所有 阅读全文
posted @ 2018-07-28 21:56 nervending 阅读(624) 评论(0) 推荐(0)
摘要:题意: 给一个数列,一些询问,问你$[l,r]$之间不同的数字之和 题解: 11年多校的题,现在属于"人尽皆知傻逼题" 核心思想在于: 对于一个询问$[x,R]$ 无论$x$是什么,整个数列中,对于答案有贡献的,只有每种数字中,$R$左边最近的一个 对于数列$1,1,2,2,3,3,4,4,1,1, 阅读全文
posted @ 2018-07-28 21:27 nervending 阅读(197) 评论(0) 推荐(0)
摘要:作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双, 甚至不在意两只袜子是否一左一右,他却很在 阅读全文
posted @ 2018-06-22 13:15 nervending 阅读(217) 评论(0) 推荐(0)
摘要:您需要写一种数据结构,来维护一些数,其中需要提供以下操作:1. 插入x2. 删除x(若有多个相同的数,因只删除一个)3. 查询x的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为小于x,且最大的数)6. 求x的后继(后继定义为大于x,且最小的数) 1.n的 阅读全文
posted @ 2018-06-22 07:36 nervending 阅读(330) 评论(0) 推荐(0)
摘要:您需要写一种数据结构,来维护一些数,其中需要提供以下操作:1. 插入x2. 删除x(若有多个相同的数,因只删除一个)3. 查询x的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为小于x,且最大的数)6. 求x的后继(后继定义为大于x,且最小的数) 1.n的 阅读全文
posted @ 2018-06-22 07:21 nervending 阅读(261) 评论(0) 推荐(0)
摘要:数列分块是莫队分块的前置技能,练习一下 1.loj6277 给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值。 直接分块+tag即可 2.loj6278 给出一个长为n的数列,以及n个操作,操作涉及区间加法,询问区间内小于某个值x的元素个数。 分块,,用vector可以很方便得保存排序 阅读全文
posted @ 2018-06-21 00:43 nervending 阅读(1237) 评论(0) 推荐(0)
摘要:在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿。在这个帮派里,有一名忍者被称之为 Master。除了 Master以外,每名忍者都有且仅有一个上级。为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级发送给他的直接下属,而不允许通过其他的方式发送。现在你要招 阅读全文
posted @ 2018-06-20 19:04 nervending 阅读(189) 评论(0) 推荐(0)
摘要:题意; 给一个数列$\{ a_i\}$ 一些询问$(l_i,r_i)$ 问你$[l,r]$有多少个不同元素 题解: 其实本质思路和离线化处理询问的线段树/树状数组写法差不多,对区间$[x,r]$来说,所有数字只有$r$前面的最后一次出现才有意义 于是想到通过记录树的版本来保存情况 先保存数列,再对于 阅读全文
posted @ 2018-06-19 22:29 nervending 阅读(228) 评论(0) 推荐(0)
摘要:题意: 给一个数列$\{ a_i \}$,一些询问$(l_i,r_i,h_i)$,求$j\in [l_i,r_i] ,a_j<=h_i$的元素数量 题解: 问区间内$<=h$的个数 等于是询问$[l,r]$区间内$[0,upperbound(h)]$的元素个数,就可以 (实际上我写的是查询区间内$[ 阅读全文
posted @ 2018-06-19 21:22 nervending 阅读(292) 评论(0) 推荐(0)
摘要:题意 给一个数列,一些询问,问$[l,r]$中第$K$大的元素是哪一个 题解: 写法很多,主席树是最常用的一种之一 除此之外有:划分树,莫队分块,平衡树等 主席树的定义其实挺模糊, 一般认为就是可持久化线段树/函数式线段树的这种实现方式 被用来求区间第$K$大的时候,是可持久化的权值线段树 主席树的 阅读全文
posted @ 2018-06-19 09:30 nervending 阅读(188) 评论(0) 推荐(0)
摘要:题意 等价于给一个数列,每次对一个长度为$K$的连续区间减一 为最多操作多少次 题解: 看样例猜的贪心,10分钟敲了个线段树就交了... 从1开始,找$[i,i+K]$区间的最小值,然后区间减去最小值,答案加上最小值即可... 这个思路,后来我看博客上的总结,应该是没问题的, 可是,依旧不知道线段树 阅读全文
posted @ 2018-06-15 15:39 nervending 阅读(1064) 评论(0) 推荐(0)