
线段树
文章平均质量分 71
IcePrincess_1968
这个作者很懒,什么都没留下…
展开
-
HDU6315:Naive Operations 题解
DescriptionIn a galaxy far, far away, there are two integer sequence a and b of length n. b is a static permutation of 1 to n. Initially a is filled with zeroes. There are two kind of operations: ...原创 2018-07-27 23:38:23 · 432 阅读 · 2 评论 -
BZOJ3196: 二逼平衡树 题解
Description您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在区间内的前驱(前驱定义为小于x,且最大的数) 5.查询k在区间内的后继(后继定义为大于x,且最小的数)Input第一行两个数 n,m 表示长度为n的有序序列和m个操作 第二行...原创 2018-07-14 23:11:20 · 378 阅读 · 0 评论 -
51Nod1766: 树上的最远点对 题解
这题用到了树的直径的非常好的性质,有必要记录 树的直径满足这样一个性质: 设一棵树的一个点集SSS的直径的端点集合是{a1,b1a1,b1a_1,b_1}(如果有多条直径选取任意一条),另一个点集TTT的直径的端点集合是{a2,b2a2,b2a_2,b_2},则点集S⋃TS⋃TS\bigcup T的直径的端点集合{a3,b3a3,b3a_3,b_3}∈∈\in{a1,b1,a2,b2a1,b1...原创 2018-07-11 23:16:04 · 353 阅读 · 0 评论 -
CodeChef QRECT: Rectangle Query 题解
这题的思路还是挺巧妙的 最关键的一步是我们改求与当前矩形不相交的矩形个数 那么显然可以容斥,用完全在上面的+下面的+左面的+右面的-四个角上被重复算的 前面的四个比较好搞,以上面举例,插入矩形时把矩形的下边界插入树状数组,查询时抓住当前矩形的上边界在树状数组里查就好了 四个角的部分,以左上角为例,插入矩形时把矩形的右下角记录下来,查询时查矩形的左上角的左上方有多少个点 所以现在相当于要实...原创 2018-05-25 23:49:32 · 612 阅读 · 4 评论 -
Codeforces #316E3: Summer Homework 题解
这样的题肯定要维护线段树,重点是如何维护裴波那契数列使得可以很快的进行合并操作 这里给出一个很骚的操作: 对于每个区间维护两个值: 1. f0∗al+f1∗al+1+...f0∗al+f1∗al+1+...f_0*a_l+f_1*a_{l+1}+... 2. f1∗al+f2∗al+1+...f1∗al+f2∗al+1+...f_1*a_l+f_2*a_{l+1}+... 我们发现这个序...原创 2018-05-01 11:36:20 · 467 阅读 · 0 评论 -
AtCoder Regular Contest 076F: Exhausted? 题解
首先需要知道Hall定理: 设二分图G的左边节点集合为AAA,右边节点集合为BBB,那么G存在完美匹配的充 要条件是 对于∀X∈A,∣X∣≤∣Γ(X)∣∀X∈A,∣X∣≤∣Γ(X)∣\forall X\in A,\mid X\mid \leq \mid \Gamma(X)\mid 其中Γ(X)Γ(X)\Gamma(X)表示集合BBB中所有与XXX中至少一点相邻的点的集合...原创 2018-04-27 09:21:06 · 238 阅读 · 0 评论 -
ZOJ4009: Another Data Structure Problem 题解
这样的题看起来挺套路的,有乘方还有模数,很容易想到应该会循环 利用费尔马小定理an−1=1(modp)an−1=1(modp)a^{n-1} = 1\pmod p 打表,会发现48次之后指数循环 于是可以维护一个48层的线段树,这道题就解决了 有可能会被卡常,可以只在修改的时候pushdown,询问的时候直接将节点的祖先们的lazy相加,这样会快一倍,就能过了#include <...原创 2018-04-03 15:23:01 · 258 阅读 · 0 评论 -
Codeforces #319E: Ping-Pong 题解
这道题给的一个条件十分奇怪:区间(a,b)能转移到区间(c,d)当且仅当 c<a<dc<a<dcc<b<dc<b<dc⊂⊂\subset (c,d)这两种情况又有区别:第一种情况下(a,b)和(c,d)互相联通,而第二种情况只能(a,b)–>(c,d). 如果说第一种情况可以用并查集维护的话,第二种情况就十分难处理另外题目有一个特殊的...原创 2018-03-28 22:40:44 · 532 阅读 · 0 评论 -
SPOJ GSS7: Can you answer these queries VII 题解
树链剖分+线段树维护裸题注意可以不取,就是如果一个序列全是负数答案是0程序写的很丑#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <utility>#include &...原创 2018-03-20 20:20:51 · 378 阅读 · 0 评论 -
SPOJ GSS3: Can you answer these queries III 题解
线段树裸题(写这道题是为了复习板子的)每个节点记录左起max,右起max,总max和sum更新方法见代码#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <utility>...原创 2018-03-19 20:21:51 · 462 阅读 · 0 评论 -
BZOJ2957: 楼房重建 题解
线段树的高级操作首先肯定将每个点化成斜率来算我们考虑在线段树的每个节点记录一个sum[k],表示如果当前只有这个节点范围内的那些楼房,完全不考虑这个区间之外的楼房,能看到多少个楼房那么显然在单点更新的时候,更新的是线段树上一条链上的节点,那么没有被更新到的节点sum值是不会变的,所以每次更新只会有logn个sum被更新考虑如果sum[k]的孩子的sum都已经计算好了,该如何更新sum[k]的值首先...原创 2018-03-15 22:54:10 · 282 阅读 · 0 评论 -
Codeforces #920F: SUM and REPLACE 题解
打一个表可以发现1e6以内的数都可以在6次求约数个数操作内变为2和1所以更新操作不会很多所以可以用树状数组来更新,并用并查集维护哪些格子还没有降到2和1#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>...原创 2018-03-01 11:16:18 · 323 阅读 · 0 评论 -
Codeforces #915E: Physical Education Lessons 题解
一眼线段树但是N的范围太大了,所以要先离散化一下把每个查询的左右端点放进数组排个序,然后每相邻的两个形成的区间看成一个点,记录长度然后用线段树维护有可能会被卡常数,注意不要单独写一个query来计算答案,而是在update的同时顺便更新答案注意线段树的数组不要开小了#include #include #include #include #include #incl原创 2018-01-16 11:31:42 · 623 阅读 · 0 评论 -
Codeforces #831E: Cards Sorting 题解
题目里面的将第一张放到牌堆最下面看起来很玄乎,其实就是摸牌的时候循环摸牌我们的目标是在摸完第i张牌后,迅速判断要摸到第i+1张牌要再摸几次于是我们可以用线段树来维护一个区间内还有多少牌没有被扔出去,这样每次做一个区间查询,扔牌时做一个单点修改就好这题还有一个难点是如何确定牌的大小次序对于序号不同的牌,当然是序号小的靠前对于序号相同的牌,要看上一种牌的最后一张在哪里,然后按照原创 2017-07-14 22:42:17 · 641 阅读 · 0 评论 -
AtCoder Regular Contest 077E: guruguru 题解
记favourite level=x我们可以发现,假设a[i]于是我们可以用线段树在这个区间上打一个公差为一的递增标记,最后对1~m的每个点做单点查询,看哪个能省下最多的步数#include #include #include #include #include #include #include #include #include #include #incl原创 2017-07-02 20:39:37 · 417 阅读 · 0 评论