
数据结构 线段树
文章平均质量分 78
yuhong_liu
这个作者很懒,什么都没留下…
展开
-
cf-edu#6- E - New Year Tree -dfs序+线段树维护
http://codeforces.com/contest/620/problem/EC《60,n题意:给你n个节点的 无向有根树 给你每个节点的初始颜色ciq次操作操作1:1 v k 把v节点的所有子节点颜色都换成k操作2:2 v 查询v节点的所有子节点颜色种类先dfs跑一遍得到 一个dfs序把每个节点涂上初始颜色, 每个节点在dfs序中的位置是i原创 2016-01-22 16:50:52 · 728 阅读 · 0 评论 -
codeforces#225-C - Propagating tree-dfs序(奇偶)+线段树
http://codeforces.com/problemset/problem/384/E题意:给一棵树,根为1,根高度为1,每次操作 两种 1:x,val, 把x节点加val,把其所有儿子-val,把儿子的儿子都+val,反复如此2:查询某个节点的值对每次操作,显然就是把该节点的所有子节点中,奇偶性与X相同的+val,不同的则-val,如此反复我们先跑原创 2016-03-26 22:38:14 · 443 阅读 · 0 评论 -
cf#305-D. Mike and Feet- 单调栈/ (线段树上二分)
http://codeforces.com/contest/548/problem/D题意:给一个n长度的数组strength 的定义为 当前数组里面 的最小元素 即为 当前数组的strength 求出给出数组的 长度为 i 的子数组(连续) 的最大的strength值 -- i 是【1,n】;思路:一开始想先对元素的值和位置排序,如果当前元素为i原创 2015-10-12 16:27:00 · 597 阅读 · 0 评论 -
UVA 11983-Weird Advertisement-k次以上覆盖矩形面积(线段树+扫描线)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18802题意:给n个矩形 会重叠,求出重叠k次以上的那一块矩形,然后输出里面的整点数其实和求 k次覆盖的矩形的面积是一个道理求k次覆盖矩形中,k不超过10,用sum[N][12],sum[N][i]存,该节点N管辖的区间范围内i次覆盖的有效长原创 2016-05-16 15:20:50 · 638 阅读 · 0 评论 -
CDOJ 1335-求恰好k次覆盖矩形面积并- (线段树 扫描线 离散化)
http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=374974给n个立方体,求恰好重叠k次的体积并,1≤N≤1000001≤K≤101≤x1≤x2≤10000000001≤y1≤y2≤10000000001≤z1≤z2≤3由于第三位只有3,实际上 就是面积并强行把输入原创 2016-05-16 17:23:05 · 864 阅读 · 0 评论 -
POJ-1151-Atlantis-求矩形面积并(线段树+扫描线)
http://poj.org/problem?id=1151给你n个矩形,求面积并,点范围大,需要离散化按照套路,先离散化,然后从下往上扫描,每次更新线段树区间,累加面积和。#include #include #include #include #include #include #include #include #include #原创 2016-05-16 10:54:34 · 797 阅读 · 0 评论 -
HDU 4358-I - Boring counting-dfs序+离线+树状数组/线段树
http://acm.hdu.edu.cn/showproblem.php?pid=4358题意:给你一颗树,n个节点,每个有其权值。给一个k。q次询问,每次询问 以x为根节点的子树里,有多少种权值恰好出现次数为k。我们先求个dfs序,把树型结构转为线性数组。那么题目变成q次查询,每次查询区间L【x】,R【x】之间有多少个权值,出现的次数恰好为k而本原创 2016-04-23 10:26:34 · 541 阅读 · 0 评论 -
Balanced Lineup-POJ - 3264-RMQ线段树/st表
可以用RMQ线段树,或者st表rmq线段树 建树 查询都是logn 支持更新元素 st表建树logn 查询o(1)! 不支持更新元素以下是st表代码#include #include #include #include #include #include #include #include #include #include using namespa原创 2015-08-09 00:04:23 · 452 阅读 · 0 评论 -
HDU 5828-H - Rikka with Sequence-线段树+玄学-区间开方/区间更新/区间求和
http://acm.hust.edu.cn/vjudge/problem/459695/origin与hdu 4027相似http://blog.youkuaiyun.com/viphong/article/details/522137464027是区间开方,但是没有修改操作,由于数最大也就是个int,开几次之后就会变成1,因此每次开方就暴力去开,遇到区间都为1的就跳过。原创 2016-08-15 21:35:53 · 783 阅读 · 0 评论 -
HDU 5029 Relief grain-树链剖分+线段树+离线
题意:给一棵树n个点,m次操作,每次把一条x到y的链涂一个Z颜色问最后每个节点,对应被涂过最多的颜色是什么?先树剖一下,变成: m次操作,每次给一个区间染色,最后问每个点被染过最多次的颜色是什么这个问题的离线方法真的很巧妙啊。。。根据颜色开一个线段树,第i位置表示颜色i出现过东西次开一个vector s[maxn],假设在【l,r】中涂上颜色c,则s[l]原创 2016-08-16 19:24:25 · 354 阅读 · 0 评论 -
HDU 4267-Phage War-线段树
http://acm.hust.edu.cn/vjudge/problem/31829/origin题意:n个数q次操作每次操作 1: 区间更新【a,b,k,c】 对区间【a,b】从a开始每k个加c2:单点查询【x】 查询x的值如果用树状数组,直接暴力 每个k,以及对应的x%k 的余数 也是【0到k-1】开一个树状数组,也就是开【k】【k】个数组,原创 2016-07-21 20:18:20 · 314 阅读 · 0 评论 -
LA3938-Ray, Pass me the dishes!--动态最大连续区间和(线段树+前后缀数和组)
题意:给一个数组,求任意区间的最大连续和 长度n,查询次数m n,m大小是5*10^5每个数不超过1e9之前做的是静态数组求一次最大连续和,方法有很多,dp之类的都能o(n)解决。 还有一个是分治法,nlogn解决:http://blog.youkuaiyun.com/viphong/article/details/48221429这里也是用分治法的思路解决:称区间【l,r】的最大原创 2015-09-05 18:29:13 · 1707 阅读 · 0 评论 -
UVA 11525 Permutation-不重复全排列的第n项-(康托展开)
康托展开的公式 : X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0!ai为整数,并且0适用范围:没有重复元素的全排列 (k-1)!就是表示第一次除第一个以外,剩下k-1个数的排列个数,乘一个S1就说明之前用了多少次这种排列了,所以对应的排列第一项应该是可选集的第(an+1)小的数原创 2016-08-18 21:49:23 · 447 阅读 · 0 评论 -
hdu-4027-线段树+暴力
题意:给一个数组序列, 数组长度为100000 两种操作: 一种操作是将某一个固定区间所有数开方(向下取整)另一种操作是询问某个区间的所有数字之和。由于数不超过2^63,因此开个七八次就变成1,由于只有开方,没有修改操作,直接暴力开方,对于sum[i]==r-l+1的区间不作处理(再开也没意义了)#include #include #include #原创 2016-08-15 18:49:30 · 1195 阅读 · 0 评论 -
POJ 3237 Tree (树链剖分+线段树)
题意:http://poj.org/problem?id=3237给一棵树,操作三种 CHANGE i vChange the weight of the ith edge to vNEGATE a bNegate the weight of every edge on the path from a to bQUERY原创 2016-08-09 21:38:09 · 658 阅读 · 0 评论 -
BZOJ-4034- [HAOI2015]T2-树链剖分+线段树
http://www.lydsy.com/JudgeOnline/problem.php?id=4034Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径原创 2016-08-09 22:57:13 · 467 阅读 · 0 评论 -
BZOJ-2243: [SDOI2011]染色-树链剖分
http://www.lydsy.com/JudgeOnline/problem.php?id=2243Description给定一棵有n个节点的无根树和m个操作,操作有2类:1、将节点a到节点b路径上所有点都染成颜色c;2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“原创 2016-08-10 02:00:09 · 849 阅读 · 0 评论 -
CodeForces 272C-Dima and Staircase-线段树区间更新-RMQ
按题意直接 每次输出 max(1,x),然后把(1,x)set为 max(1,x)+y。。。或者贪心也行。#include #include #include #include #include #include #include #include //#include #include using namespace std;__int64 max(__int64 a,原创 2016-03-20 18:46:13 · 405 阅读 · 0 评论 -
HDU-1823-Luck and Love-二维线段树入门
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14799题意:Luck and LoveTime Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64uSu原创 2015-11-20 00:32:51 · 390 阅读 · 0 评论 -
CF#321-DIV2-E. Kefa and Watch-线段树+字符串哈希
题意给你一段长度为n的字符串,给你m,k,表示有m+k次操作格式 operation L R Doperation =1; 表示把第L到第R个字符改为doperation =2;表示求 L到R这个字符串是否存在长度为d的循环,是输出YES,否则NOn=10^5; 操作也是10^5思路:一开始看到区间修改,觉得可以是线段树...然后要 查询循环节。。。想到原创 2015-10-04 14:58:18 · 727 阅读 · 0 评论 -
CF#310-E - Case of Chocolate-(set+贪心)/(线段树+离散化)/(隐式线段树)
看了官解 是用2个线段树,一个维护横坐标,一个维护纵坐标(要离散化).......还有后面的隐式线段树还没看后来看到另一种方法、仔细分析下题目的操作,其实很简单。用两个set维护 横纵坐标、分别叫row(水平方向)、high(竖直)分析两种情况:对于(xi,n+1-xi),若是向上吃,能够影响它的操作(xj,n+1-xj)一定是右边第一个点,若点i右边有点:如果原创 2015-09-30 03:12:56 · 670 阅读 · 0 评论 -
hdu-5475-An easy problem-线段树求乘积
题意。初始X=1;给n,mod ,表示n次操作操作1格式 : 1 b 表示用x乘上b操作2格式: 2 n 表示 当前x除掉第n次 "1操作” 的数每次操作输出一个答案,输出的答案是要对mod取模由于有除法所以我们不能每一步取模一直在想什么办法能过。。。最后卡死了。。赛后才知道 直接就是一个长度为n的rmq线段树每个点维护一个数 初始值为1操作1 就是原创 2015-09-26 23:50:41 · 559 阅读 · 0 评论 -
LA-11992-Fast Matrix Operations 快速矩阵操作(线段树成段更新)
题意:给定一个r*c(r1 x1 y1 x2 y2 val 表示将(x1,y1,x2,y2)(x12 x1 y1 x2 y2 val 表示将(x1,y1,x2,y2)(x13 x1 y1 x2 y2 val 表示输出(x1,y1,x2,y2)(x1线段树基本功能啦。。开r个线段树..(最多20).每次对r个线段树操作就好了这里有个问题就是,set和a原创 2015-09-06 18:19:40 · 877 阅读 · 0 评论 -
Fast Arrangement-3577-线段树成段更新
本题超坑爹,先是题意看了半个多小时都不理解样例,后来去找别人的题解才看懂了。问题是,给k,q k是火车最多能运载的人数,q是询问次数q行 每行两个数a,b 指有一个人要从a站做到b站,是否合法即,第一次假设列车是从1开始,一直走到尽头(1000000)当火车遇到一个(a,b)时 ,先查询区间(a,b-1)的值是否小于k(表示列车在这段路上搭载少于k个人),若是,就把区间(a,原创 2015-08-12 11:13:06 · 509 阅读 · 0 评论 -
HDU1556-Color the ball-线段树成段更新入门题/前缀和
线段树成段更新的裸题。。。。。因为没强制在线,用前缀和水了一发 700mshttp://acm.hdu.edu.cn/showproblem.php?pid=1556用线段树水了一发。。。1600ms。。。区间线段树 和 前缀和数组记录两种方法都可以实现 单点/区间更新(logn)、单点/区间查询(logn) 不同就是 前者是 在线算法,即可以边更新边查询(logn),后原创 2015-08-12 02:56:04 · 784 阅读 · 0 评论 -
POJ-3225 Help with Intervals-线段树/成段更新+倍增区间法
#include #include #include #include #include #include #include #include #include #include using namespace std;#define ptf(ar1,ar2) printf("%d:%d\n",ar1,ar2);typedef __int64 ll;const ll m原创 2016-02-05 03:34:53 · 846 阅读 · 0 评论 -
POJ-3145-Harmony Forever-线段树暴力
题意: 对一个集合,有两种操作,一:将某个元素加入集合中 二:个是问当前集合中mod y 最小的数,如果有多个,输出最近加入的那个元素的输入时间,在本题指的是该元素加入集合时操作一的次数当y比较大每次对[0,y-1]、[y,2y-1]...每个长度为y的区间查询最小的存在的数。。。最后比较得到答案y比较小的话,如果这样遍历 区间最多会有 500000/y个。。所以不如直接原创 2016-02-11 14:56:28 · 663 阅读 · 0 评论 -
cf#ecr7-C. Not Equal on a Segment-线段树-rmq
给出n长度的序列,m次查询,每次找出l,r之间不等于x的数的下标线段树维护区间的rmq值,并且记录下rmq值对应的下标每次找rmq(l,r)的最大最小值,如果都等于x,表示l到r全为x,输出-1,否则,输出不等于x的那个最值对应的下标。By liuyuhong, contest: Educational Codeforces Round 7, probl原创 2016-02-14 14:52:13 · 481 阅读 · 0 评论 -
hdu-2795-Billboard- 线段树-单点
题目大意:一个h*w的公告牌,要在其上贴公告。 输入的是1*wi的w值,这些是公告的尺寸接下来要满足的条件有:1、尽量往上,同一高度尽量靠左。2、求第n个广告所在的行数。3、没有合适的位置贴了则输出-1。用线段树实现,节点存的是每一行剩余的空位,查找用的是二分的思想,每次在区间里查找第一个大于等于val值的位置。先查左子区间是否存在大于等于val值,如果是则进入左子区间查询,否则,原创 2016-02-03 10:36:43 · 350 阅读 · 0 评论 -
poj-2828-Buy Tickets-线段树-单点
题意:插队问题;n个操作,操作为: pos,val表示把一个人插到pos位置并且这个人特征值记为val,最后输出整个序列有一点是,每个pos[i] 的范围规定了是 1-i ,这个限定使得题目可以比较容易的解决即如果我们逆序来看,对于每个pos[i],val,当前这个人本来应该是留在pos[i]位置,但是如果他之前还有X人在pos[i]的前面插入了,则当前这个原创 2016-02-03 17:24:13 · 385 阅读 · 0 评论 -
POJ-2481-Cows-线段树/树状数组
http://poj.org/problem?id=2481给出n个区间输出每个区间 是多少个区间的真子集 思路:区间左端点为第一关键字,右端点第二关键字,前者升序后者降序这样对每个区间i,只需要查询 Ri到n有多少个右端点就是答案, 可能有好几个区间相同,那么预处理一下最后减掉完全相同的区间即可#include #include #inclu原创 2016-02-03 22:39:58 · 339 阅读 · 0 评论 -
poj 2182 -Lost Cows -线段树-还原逆序数组
题意:给出一个数组每个元素的逆序数,还原这个数组(序号为1-n)思路:还是从逆序开始处理,对于每个位置i,如果逆序数是a[i],并且我们不考虑i之后的位置,则第i个位置的序号本应该是a[i]+1,但是如果i之后的位置还存在k个小于等于a[i]+1的数,则位置i需要改为 a[i]+1+k。因此,我们从后面往前处理,每次处理只需要看之前的操作(对应操作编号i到n)是否确定了小于原创 2016-02-04 02:10:06 · 450 阅读 · 0 评论 -
poj2750-Potted Flower-动态求最大连续环区间和(线段树上分治+set维护)
http://poj.org/problem?id=2750题意,给你n个数,首尾相接,让你求最大连续环区间和首先知道这个最大连续和只有两种情况,1是不跨越首尾的,这种直接求2是跨越首尾的,显然最大连续和是跨越首尾的,那么最小连续区间和必然在1-n之间,所以我们只需要求最小连续和,然后sum-它就得到最大连续和如果只求一次,可以dp就好了,但是由于每次动态更新单点,所以原创 2016-03-03 21:14:24 · 520 阅读 · 0 评论 -
POJ2886-Who Gets the Most Candies?-模拟约瑟夫环+反素数表(线段树上二分+爆搜打表)
http://poj.org/problem?id=2886题意,就是让你模拟约瑟夫环,给n,m,n是人数,m是第一个出局的人给数组a[],a[i]表示第i个人出局后,下一个出局的人是i的位置往右数第a[i]个人(如果a[i]让你求出出局的人中,他的出局序号的约数个数最大的一个人,如果个数相同输出最早的一个输出名字和约数个数也就是1-n里 约数个数最原创 2016-03-03 10:25:29 · 676 阅读 · 0 评论 -
hdu 5893 List wants to travel 树链剖分 +线段树
http://acm.hdu.edu.cn/showproblem.php?pid=5893题意:题意:一棵无根树,两种操作:改变路径上的颜色,和询问路径上有多少段颜色。裸的树链剖分+线段树维护颜色段,唯一难点就是合并的时候 如果两个区间段颜色一样,ans--,链同理。 http://blog.youkuaiyun.com/viphong/article/details/5原创 2016-09-19 02:05:55 · 1012 阅读 · 0 评论