
线段树
文章平均质量分 88
huanghongxun
这个作者很懒,什么都没留下…
展开
-
CodeForces 527D Clique Problem 树状数组
对于i∈S,有xi和wi。问S的最大子集其中每对i,j满足|xi-xj|>=wi+wj首先可以干掉绝对值。然后变形得xi-wi>=wj+xj所以对每个点建线段[xi-wi,xi+wi]。即对左端点xi-wi,统计比xi-wi小的右端点组成的最大子集的大小,使用树状数组维护即可,查询到的数存入右端点。问题转化为对于每条线段[xi-wi,xi+wi],更新树状数组xi+wi,值为[1,原创 2015-11-15 21:01:24 · 639 阅读 · 0 评论 -
URAL 1841|Cableways|...
二维空间中存在若干条连续的折线,折线方向从左下到右上或者右下到左上。一个人沿着这个折线走从下方走到上方。每条折线上可能会有可以直达上方最近折线的线,这种线只能通往最近上方折线,而且走这条线只是y坐标增加。走折线需要一定时间,走直上的线也需要一定的时间。求最少时间到达折线y坐标最大的点。求第K大。。偷懒并没有写平衡树又写了二分+树状数组。。#include <cstdio>#include <cst原创 2016-04-24 21:59:58 · 465 阅读 · 0 评论 -
BZOJ 4515|SDOI 2016|游戏|树链剖分
未完待续#include <cstdio>#include <algorithm>#include <cstring>typedef long long ll;using namespace std;const int N = 100005, M = N * 2, S = M * 2;int h[N], p[M], v[M], sz[N], fa[N], cnt, ts;int dep原创 2016-04-28 17:20:11 · 596 阅读 · 0 评论 -
BZOJ 3648|寝室管理|点分治|树状数组|平衡树
给出一个至多有1个环的图,求长度不超过K的路径数。考虑树的情况,显然用点分治就可以搞出来了。 对于过根的路径,先处理出各深度有多少的点,再依次枚举各子树,对于各点,有其深度,问题变成了在其他子树中,与现有深度之和不超过K的有多少个,而枚举的点到根的距离是已知的t,那么就变成在之前的子树中,深度不超过K-t的点有多少个,平衡树、树状数组都可以轻易地维护。O(nlog2n)O(n\log^2 n)环呢原创 2016-04-29 09:53:59 · 1059 阅读 · 0 评论 -
BZOJ 1018|SHOI 2008|堵塞的交通|线段树
咦,一道自带题解的题目?题目的坐标表示成(r,c),r=row,行号,c=column,列号。 因此x1,x2只有取1和2两种情况………考虑线段树维护一格的连通性,合并区间如图: 令总的为r,左半区间a,右半区间b,修改了mid(x,y)。 那么对于r0(上);r1(下);r2(左);r3(右);r4(右下);r5(右上)r_0(上);r_1(下);r_2(左);r_3(右);r_4(右下原创 2016-04-21 21:07:21 · 784 阅读 · 0 评论 -
BZOJ 4540|HNOI 2016|序列|线段树|离线
好像aia_i没有什么特别的地方?考虑将右端点的区间拆成[1,r2]−[1,l2)[1,r_2]-[1,l_2)。 然后我们就可以枚举右端点了。 此时左端点有个区间[l1,r1][l_1,r_1]而对于最大值,其可以向左向右延伸,而左右不相互影响,因此考虑左右扫一遍,能延伸到的最远的地方单调栈就可以处理。#include <cstdio>#include <algorithm>using n原创 2016-04-22 13:13:02 · 800 阅读 · 0 评论 -
机房水题欢乐赛 2016-04-22 下午
水炸了。。。T1: Word给出一个原串和n个字符串。 判断原串是否存在两个不相交子串按顺序连接起来在n个字符串中存在一样的。 输出一样的个数。【输入样例】ABCBABA 2 BAAB ABBA【输出样例】1【样例解释】BAAB这个单词是无法出现在句子中的。 ABBA这个单词则可以出现在句子中,当a=1,b=2,c=4,d=5或者a=1,b=2,c=6,d=7时即可。【数据约定】40%数原创 2016-04-23 12:17:00 · 524 阅读 · 0 评论 -
BZOJ 4538|HNOI 2016|网络|树链剖分
题目问的是,实时修改路径最大值,求不经过某点的路径最大值。 反过来想,维护不经过路径的最大值,求经过某点的最大值。于是树链剖分即可解决。 卡着时间过了。。烦,BZOJ的编译器太老 vector#include <cstdio>#include <set>#include <vector>#include <algorithm>using namespace std;const int原创 2016-04-23 23:43:22 · 719 阅读 · 0 评论 -
BZOJ 3218|UOJ 77|A + B Problem|最大流|可持久化线段树
吐槽A这题目真的很吸引人233。 样例不能复制真是可惜233。 题目的方格染色以及奇怪的节点让我想起了以前看过的一篇博文,讲最小割的。。 于是这道题就最小割。。。题解好吧假设我们不知道这道题要最小割,睁眼说瞎话 看着题目给的式子我们需要对它做♂点事情。 max⎧⎩⎨⎪⎪∑i黑bi+∑i白bi−∑i奇怪pi⎫⎭⎬⎪⎪ \max \left\{ \sum_{i黑}b_{i}+\sum_{i白}原创 2016-01-13 13:16:39 · 1759 阅读 · 0 评论 -
CodeForces #157(258A|258B|258C|258D|258E)|数位DP|搜索|线段树
258A - Little Elephanh and Bits小象有一个二进制表示的整数a。现在它要删掉一个二进制位,使这个新整数最大。输入输出样例input101output11input110010output11010题解显然删去尽量高位的0答案就最大,当然没有0的话随便删个1就好了。代码258B原创 2017-06-17 17:03:03 · 653 阅读 · 0 评论 -
POJ 2352|URAL 1028|Stars|树状数组
http://acm.timus.ru/problem.aspx?space=1&num=1028题目大意棋盘中有n个棋子,一个棋子的等级定义为其左下的所有棋子的数目(包括正左方和正下方的棋子)。输出等级0~(n-1)的棋子的数目题目天文学家经常检查星图,即用一个点表示一颗星,一个平面表示宇宙,故每颗星都有自己的坐标。定义一颗星的等级为一些不高于且不在这颗星右边的星星的数目。天文学家希望知道每个星星原创 2017-10-03 22:59:42 · 327 阅读 · 0 评论 -
UVa 105|The Skyline Problem|暴力|线段树
原文地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=41题目翻译随着高性能图形工作站的到来,CAD(计算机协助设计)和其他领域(CAM,VLSI design)的工作效率逐渐增加。一个关于绘图的问题是消除被遮挡的线条。你现在要写个程序帮助一个工程师绘制原创 2017-09-26 23:11:35 · 468 阅读 · 0 评论 -
2017 ACM-ICPC Hua-Lien Regional
A: Smooth Sequences如果一个序列是光滑的仅当相邻元素差的绝对值不超过d。称一个序列是半光滑的仅当修改至多一个元素使得序列变得光滑。给定序列询问是否光滑。题解半光滑的有3种情况,一种是连续两端差均不满足d,这种判断两端点差不超过2d即可,一种是一端的差不满足d,随便改,一种是中间某段不满足d,判断修改左右端点即可。#include &lt;bits/stdc...原创 2018-05-01 17:24:05 · 1173 阅读 · 1 评论 -
POJ 3470|Walls|线段树
网格上有N(<=5e4)堵墙,有M(<=5e4)只鸟,其会选择最近的那堵墙撞晕,求鸟撞到各堵墙的次数。考试时给的中文翻译不忍直视。。貌似还是从某题解直接抄过来的。。直接看英文了。。 然后就在POJ上排#13了。。首先离散化一下。。 然后因为只能上下左右4个方向飞情况类似,这里我们只需要讨论一个方向。考虑向上飞的情况,我们人为添加一条下边界扫描,同时维护横着的墙,显然,如果遇到了新的墙,肯定目前其原创 2016-04-27 10:32:30 · 1427 阅读 · 0 评论 -
BZOJ 3790 神奇项链 Manacher 树状数组
几个月没写manacher忘干净了。。。将一些回文串直接连接或前、后缀重复部分完全重叠,产生了新的字符串,问该字符串的连接次数。如abacada 考虑求出所有极长回文串。 即a[1..1,3..3,5..5,7..7],b[2..2,6..6],c[4..4],aba[1..3],aca[3..5],ada[5..7] 发现这些回文串按照其位置放置将区间完整覆盖的方案即我们所求。 也就是说,原创 2016-04-10 12:18:58 · 601 阅读 · 0 评论 -
BZOJ 2819 Nim 树链剖分
在树上链改+链查Nim游戏是否必胜。如果是在链上的话直接xor一遍不等于0就好了。树上的话树链剖分一下就好。反正bzoj评测机是linux栈大233。不过既然是xor(好像没什么关系),不如树上链查转化成点到根的链查。用树状数组维护一下就好了。#include #include using namespace std;#define FOR(i,j,k原创 2015-11-22 10:27:04 · 547 阅读 · 0 评论 -
BZOJ 3262 陌上花开 “树套树”
三维空间内求每个点比它3维都要大的点的个数。第1维排序,第2维树状数组,第3维treap。好像第1维排序就叫做降维了?神tm吧一个数组开错大小老wa。。。cdq分治好像挺好写#include #include using namespace std;int read() { int s=0,f=1;char ch=getchar(); for(;ch'9'原创 2015-11-25 23:09:15 · 604 阅读 · 0 评论 -
BZOJ 4276 费用流+线段树构图
为什么别人22s我37s。。#include #include #include using namespace std;const int N = 205005, M = 500005;const int inf = 0x3f3f3f3f;#define FOR(i,j,k) for(i=j;i<=k;i++)struct CostFlow { int h[N]原创 2016-01-16 22:29:30 · 741 阅读 · 0 评论 -
POJ 2155 Matrix 二维线段树
给出一个只包含0和1的矩阵,要求支持子矩阵整体异或1和查询单点。发现异或特性,所以省的另外开个lazy标记了。直接修改seg就可以了。所谓的标记永久化?回调函数还不错233,省的复制代码看起来很恶心(应该是叫回调函数吧,逃)。#include #include bool data[2300][2300];struct SegTree { void (*modify_ca原创 2016-01-11 21:25:01 · 394 阅读 · 0 评论 -
BZOJ 2762 JLOI 2011 不等式组 树状数组
#论我都能想出来的题目# 给出一些不等式,问对于x=k有多少不等式满足要求。 显然一次不等式可以看做一个半数轴或全数轴或空,分别是x>a,x<a,x∈R,x∈∅x>a,x<a,x\in R,x\in \emptyset。 因此这是个区间修改单点查询,使用树状数组即可。 还是尽量排在第一页吧。。#include <cstdio>#include <algorithm>#include <c原创 2016-02-04 22:11:21 · 731 阅读 · 0 评论 -
BZOJ 3110 ZJOI 2013 K大值查询 线段树套线段树
题目:有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。先维护权值再维护区间?反正数字最大就5W?对权值建立[1,n]的权值线段树,而且是单点修改单点查询。每个节点维护拥有该权值的区间线段树。[a,b]加数字c的话原创 2016-01-11 22:58:51 · 393 阅读 · 0 评论 -
BZOJ 3218 a + b Problem 最大流 + 可持久化线段树
这题目真的很吸引人233。题目的方格染色以及奇怪的节点让我想起了以前看过的一篇博文,讲最小割的。。于是这道题就最小割。。。先留个坑。。为什么别人的程序都这么快。。应该不是这么写的吧。。真的是痛苦。。各种脑抽写错,程序重写了2遍。。原来SegTree的缺省构造函数里面包括了自增id,然而operator new里面定义的大数组也会自增id。原创 2016-01-12 20:55:05 · 655 阅读 · 0 评论 -
CodeForces 283A Cows and Sequence 树状数组
明天就要去GDKOI了好虚怎么办QAQ。给你一个序列,一开始只有一个0 接下来有n个操作,每个操作是下面3种操作描述的一种 前ai个数全部加上xi 在序列末尾加上ki这个数 序列末尾删去一个数(所以序列的大小会减一)。只有序列里至少有2个数才执行这个操作 。做完每一步,你需要输出这个序列的和的平均数。Input第一行n 接下来n行,每行第一个数为ti(1<=ti<=3),为相应的操作原创 2016-02-18 16:21:53 · 768 阅读 · 0 评论 -
机房水题欢乐赛 2016-02-17
考试时题面用pdf格式给却不是latex生成的,严重吐槽T1: 数字给你N个数,编号1~N,从某个区间[L,R]中,任意选择二个数字,它们相同的概率是多少。Input第一行一个整数N 接下来一行,N个整数。 第三行一个整数M,表示询问次数。 接下来M行,每行两个整数L,ROutputM行,每行一个分数,表示两个数字是相同的概率,必须为最简分数。Sample Input6 41 2 3 3 3原创 2016-02-17 16:56:16 · 430 阅读 · 2 评论 -
BZOJ 2588/SPOJ Count on a Tree LCA+线段树
问树上点对间的第k大。 对每个点维护到根的路径上的权值情况,分别建立权值线段树,为了压缩内存利用可持久化线段树即可。#include <cstdio>#include <algorithm>using namespace std;#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 100005, M = N, K = 16;struct S原创 2016-03-14 23:34:50 · 501 阅读 · 0 评论 -
BZOJ 3289 Mato的文件管理 莫队算法
询问区间内逆序对的个数。 区间转移是O(logn)O(\log n)的,加上莫队总复杂度(O(nn‾√logn)(O(n\sqrt{n}\log n)。#include <cmath>#include <cstdio>#include <algorithm>using namespace std;const int N = 50005;int block[N], a[N], c[N],原创 2016-03-13 13:31:30 · 372 阅读 · 0 评论 -
GDCPC 2018
原题选手或成最大赢家。A: Chika’s Math Homework题目大意1≤T≤105,1≤n≤10181≤T≤105,1≤n≤10181\leq T\leq 10^5, 1\leq n \leq 10^{18},求 ∑i=0ni2Cin∑i=0ni2Cni \sum_{i=0}^n i^2C_n^i 题解比赛的时候队友打表找规律大师秒杀。。太强大了。 可...原创 2018-05-08 13:50:15 · 1333 阅读 · 0 评论