
线段树
文章平均质量分 81
qian99
这个作者很懒,什么都没留下…
展开
-
hdu 5091 Beam Cannon(线段树 + 扫描线)
题意:平面上有n个点,选一个W×H的矩形,使得矩形内的点最多。思路:原创 2014-11-05 21:51:24 · 902 阅读 · 0 评论 -
zoj 3632 Watermelon Full of Water(DP+线段树)
题意:有个人每天都要吃西瓜。。。每天的西瓜的价钱不同,买了西瓜后,最多可以吃ti天,每天最多买一个西瓜,如果一天买了一个西瓜,那么之前买的就要丢掉。问n天花掉的最少多少钱能保证这个人每天都能吃到西瓜。思路:dp方程还是挺好想的。dp[i][j]表示在第i天是否买西瓜所花费的最小价值,dp[i][1]=min(dp[i-1][0],dp[i-1][1])+val[i]。dp[i][0]=min(原创 2014-03-26 18:44:12 · 739 阅读 · 0 评论 -
poj 1177 Picture(线段树+矩形周长并)
题意:给出平面的n个矩形,原创 2014-05-05 14:40:30 · 780 阅读 · 0 评论 -
UVA 12424 Answering Queries on a Tree (树链剖分)
题意:给出一棵树,有两种操作,一种是将原创 2014-05-05 19:09:33 · 732 阅读 · 0 评论 -
UVA 11983 Weird Advertisement (线段树+矩形面积并)
题意:给出平面上的n个矩形,求被原创 2014-05-05 10:44:10 · 716 阅读 · 0 评论 -
zoj 3597 Hit the Target! (线段树)
题意:有n个枪和m个原创 2014-05-04 19:12:08 · 730 阅读 · 0 评论 -
poj 2482 Stars in Your Window(线段树+扫描线)
题意:原创 2014-05-03 15:31:05 · 646 阅读 · 0 评论 -
hdu 4052 Adding New Machine(线段树+扫描线)
题意:给出一个W×H的矩形,有些地方有原创 2014-05-03 23:25:24 · 796 阅读 · 1 评论 -
POJ 1151 Atlantis (线段树求矩形面积并)
题意:给出n个矩形,原创 2014-05-03 19:22:51 · 708 阅读 · 0 评论 -
SGU 336 Elections (离线+线段树)
题意:原创 2014-05-01 19:51:11 · 946 阅读 · 0 评论 -
spoj 61 Brackets(线段树)
题意:给出一个括号序列,有原创 2014-05-01 20:47:14 · 981 阅读 · 3 评论 -
hdu 4351 Digital root(线段树区间合并)
题意:给出n个数,m组询问,每次原创 2014-04-25 11:51:06 · 769 阅读 · 0 评论 -
Uva 1471 Defense Lines(线段树)
题意:给出一个长度为n的序列,原创 2014-06-16 12:02:02 · 842 阅读 · 0 评论 -
hdu 4866 Shooting(主席树)
题意:给出n个线段,m次射击,每次原创 2014-07-26 15:36:41 · 1552 阅读 · 0 评论 -
hdu 5039 Hilarity(dfs序 + 线段树)
题意:给出一颗树,有原创 2014-09-22 15:13:13 · 974 阅读 · 0 评论 -
zoj 3813 Alternating Sum(线段树)
题意:原创 2014-09-09 20:49:36 · 760 阅读 · 0 评论 -
zoj 3800 Calculation(离线 + 线段树)
题意:给出n个数,原创 2014-08-25 22:13:29 · 1150 阅读 · 0 评论 -
hdu 4942 Game on S♂play(线段树)
题意:给出一颗二叉树,每个节点有一个权值,原创 2014-08-13 14:41:34 · 856 阅读 · 2 评论 -
hdu 4913 Least common multiple(线段树)
题意:给出n个数每个数以2^ai * 3^bi的原创 2014-08-11 19:22:06 · 1071 阅读 · 0 评论 -
CF 458C - Elections (枚举 + 线段树)
题意:有原创 2014-08-11 14:39:35 · 995 阅读 · 0 评论 -
Codeforces Round #267 (Div. 2)
昨晚原创 2014-09-19 14:18:14 · 1009 阅读 · 0 评论 -
hdu 4973 A simple simulation problem(线段树)
题意:原创 2014-08-21 19:54:42 · 892 阅读 · 0 评论 -
hdu 3854 Glorious Array(线段树or树状数组)
题意:n个位置,每个原创 2014-06-18 17:34:46 · 1452 阅读 · 0 评论 -
hdu 4867 Xor(线段树)
题意:给出原创 2014-07-27 15:25:55 · 1712 阅读 · 3 评论 -
zoj 3633 Alice's present(离线+线段树)
题意:给出区间[L,R],从右向左检查,找到第一个重复的值。思路:首先把每个值离散化,将查询按R排序保存。依次把1~n中的数x插入线段树,令v=num[i],用pre[v]表示上一次出现的v这个值的位置,用last[v]表示再上一次出现的位置。把last[v]赋值为0,pre[v]的值赋值为1,pre[v]=x。这样,对于每个以i为右端点的查询,第一个重复的就是这个区间中最右边的1的位置,这个原创 2014-03-19 18:19:06 · 595 阅读 · 0 评论 -
CF 339D - Xenia and Bit Operations(线段树)
由于点的个数为2^n,如果把每一步操作列出来,可以发现这是一颗满二叉树,因此,可以使用线段树维护每个操作后的值,再用一个节点来记录操作的类型,然后直接修改就行了。代码:#include#include#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f原创 2014-03-04 17:41:09 · 1200 阅读 · 0 评论 -
spoj 1557. Can you answer these queries II(线段树)
题目链接:http://www.spoj.com/problems/GSS2/ 题意:还是求区间最大子段和,不过要求重复的数字只能算一次。 思路:感觉这题好难想……看了看题解,总算想明白了。首先是解决重复数字的问题,这需要离线处理,将每个数字从左到右依次插入到线段树中,用pre[]记录这个数字上一次出现的位置,那么在这个数字之前的就不需要增加当前的数字了,因此只要更新处理它们之间的原创 2013-10-13 10:38:33 · 1046 阅读 · 0 评论 -
hdu 4605 Magic Ball Game
题意:给出一棵二叉树,树上每个节点都有一个权值w[i],从根节点向下扔一个权值为x的小球,小球到达每个节点有三种情况:①x==w[u],小球停止运动 ②xw[u],小球有1/8的概率向左走,有7/8的概率向右走。有q个询问,每个询问有两个值v、x,回答从根节点扔小球,小球停在v或经过v的概率。思路:由于一棵树从根节点到任意一个节点的路径是唯一的,那么我们只要将询问离散化,然后用一个数据结构去维原创 2013-10-08 16:03:55 · 739 阅读 · 0 评论 -
hdu 4747 Mex
题意:给出n个数,mex(L,R)定义为区间[L,R]中没有出现的最小负数,求sum{mex(i,j)}。思路:虽然数列的数的范围很大,最大有10^9,但是仔细想一下就会发现超过n的数其实是没有用的,因为一定有一个数是小于n的,因此直接把大于n的数变成n+1就行了。关于mex的计算方法,假如对于i已经算出了所有的mex(i,j){i代码:#include#include原创 2013-09-16 18:16:39 · 1515 阅读 · 0 评论 -
hdu 4027 Can you answer these queries?
题意:给出N个数,有两个操作,一个是把每个数变成原来的数开根号,另一个是查询区间值的和。思路:这个很明显是线段树。开始的时候我写的是成段更新,结果T了……后来仔细一想,每个数最多开了6次根号就会变成1,变成1以后就不会再变化了,这样的话,即使单点更新,每个数最多更新6次,所以不会超时,但如何保证所有值变成1以后不会再更新了呢?我是用一个数组记录当前区间中1的个数,当这个区间中1的个数等于区间的原创 2013-08-29 10:37:56 · 745 阅读 · 0 评论 -
hdu 4267 A Simple Problem with Integers
题意:给出一n个数,有两种操作,一种是查询第i个数,另一种是在区间[a,b]中将满足(i - a) % k == 0的值加c。思路:用线段树搞,不过这题不是每个区间的所有值都要更新,这样的话就不太好写,每个区间可以记录两个值,一个是从这个区间的第几位开始,另一个是隔多少加c,这样的话虽然可以写,但是内存可能不太够,仔细想一想的话可以发现,只需要55种状态就够了,从第0位开始有10种状态(1~1原创 2013-08-27 17:31:24 · 789 阅读 · 0 评论 -
hdu 4578 Transformation
比较裸的线段树,但是写起来比较烦,昨天无限wrong+TLE。后来发现写的实在太麻烦,只好推到重写…… 这题主要问题就是处理乘和加的操作,其实这两个操作可以看成一个,乘看成a*c+0,加看成a*1+c,这样的话就可以把两个操作当成一个操作了,这么写应该是没问题的,但是我写挂了Orz……后来又换了下方法,每次都先处理乘的操作,再处理加的操作,但是先乘再加和先加再乘是不同的,如果已原创 2013-08-11 10:02:19 · 1690 阅读 · 4 评论 -
UVA 11525 Permutation
题意:给出两个整数n和k,求出1~k的所有序列中,按照字典序从小到大排列后的第n个序列(从0开始编号),其中n用k个整数给出 :。思路:先考虑n个数的排列情况,如果第一个数是2的第一个序列是2、1、3……k,在它之前的所有序列的个数就等于以1开头的序列的个数,即(n-1)!,这样很容易看出第一个数为所有的数中第S1+1个数,后面的数以此类推,就可以求出整个数列。这样的话可以采用线段树,如果这个原创 2013-06-21 20:59:29 · 1087 阅读 · 0 评论 -
poj3667 Hotel
题意:有n个房间排成一排,有m个操作,对于操作1,询问是否有长度为v的连续的空房间,如果有,输出最小的左边的房间的编号,然后旅客将住进这些房间。对于操作2,将x开始,长度为D的房间清空。思路:线段树。用3个数组tsum,presum,fixsum分别记录当前区间的最长连续空房间的长度、从区间最左边开始最长连续空房间的长度、从区间右边开始最长连续空房间的长度。每次更新时,tsum要么等于左右儿子原创 2013-06-19 14:02:00 · 763 阅读 · 0 评论 -
UVALive 4108 SKYLINE
这题写了三四天,真是写郁闷了,后来才发现自己这题写2B了,唉,桑心。题意:在地平线上依次建n座建筑物。建筑物的修建按照从后往前的顺序,修建完一座建筑物以后,统计它在多长的部分是最高的,并把这个长度称为“覆盖度”,最后输出总的覆盖度。思路:刚开始的时候,我的思路比较简单,就是记录每个区间最高的建筑物有多高,如果要修建的这个建筑物的高度比这个区间最高的建筑物还高,那么这个结果就要加上这个区间的原创 2013-06-19 20:54:16 · 1340 阅读 · 0 评论 -
LA 3938 "Ray, Pass me the dishes!"
这题写的比较蛋疼,看着刘汝佳大神的书写的,还写了一天,真是惭愧啊,思路和书上当然是一样的,维护最大连续和的区间、最大前缀和的区间以及最大后缀和的区间就行了,但是感觉不太好写,之前写完了敲了很多测试数据也没看出错误,wa了好几次,后来实在没办法,又重头到尾扫了几遍,改了几个bug才终于A掉了。 #include #include#include#include#include#in原创 2013-06-13 20:01:46 · 1413 阅读 · 0 评论 -
spoj 1716. Can you answer these queries III(线段树)
题目链接:http://www.spoj.com/problems/GSS3/ 题意:给出n个数,有两个操作,一个是查询区间最大子段和,另一个是修改某一个数。 思路:其实这题挺简单,依然是线段树,和GSS1差不多,但是由于我犯了各种傻逼错误,交了好多次才过,好蛋疼。。。做法和GSS1差不多,由于有修改操作,因此再加个数组用来记录区间和就行了。。。 代码:#include原创 2013-10-13 17:48:03 · 861 阅读 · 0 评论 -
spoj 2713. Can you answer these queries IV(线段树)
题目链接:http://www.spoj.com/problems/GSS4/ 题意:给出n个数,有两个操作,第一个操作是将区间[x,y]中的数都开根号,第二个操作是求区间[x,y]的和。思路:这题以前做过类似的……对于一个10^18以内的数,最多开6次根号它的值就到1了,也就是每个数最多只要开6次根号,这样更新的时候只要单点更新就行了,如果一个区间内的值都是1了,那么就不用在更新了。原创 2013-10-13 18:42:20 · 867 阅读 · 0 评论 -
spoj 1043. Can you answer these queries I (线段树)
题目链接:http://www.spoj.pl/problems/GSS1/ 题意:给出n个数,询问某一区间中,最大的连续子段和。思路:用线段树维护3个值:maxv[rt]:区间最大连续子段和,pre[rt]:区间最大前缀和,suff[rt]:区间最大后缀和,就是合并时改一改就好了,其实很简单的。 代码: #include#include#include#in原创 2013-10-13 10:23:39 · 975 阅读 · 2 评论 -
CF 396C On Changing Tree(线段树)
题意:给出一棵树,最开始每个节点权值都为0,有两种操作,一种是将点v加上x,对于它的子树中的点,加上x-i*k,i为该点到v的距离,第二个是查询点v的值。思路:通过dfs,可以把树转化为一个区间[l,r],第一种操作实际上是x+k*(dep[v]-dep[u]),dep[]为该点到根节点的距离,u为v的子树。那么我们用两个线段树维护x+k*dep[v]和k的值,查询时两个值用第一个值减去第二个原创 2014-02-27 20:30:00 · 1142 阅读 · 0 评论