线段树
文章平均质量分 79
Euler_M
这个作者很懒,什么都没留下…
展开
-
poj 3667 Hotel
/* * File: main.cpp * Author: Mi *关于这个题其实以前也做过一次这个题,但还有有些地方没有弄懂 * 这次又重新拿出来认真看了下,终于搞懂了,对线段树的认识有加深了一步 * 题目意思就不说了 * 分别用lv,rv,cv来表示线段左边剩余的房间数,右边剩余的房间,总共剩余的房间数 * state(0,1,-1)分别表示,没有人住,已经有人住,和其它情况,也就是说这条线段有一部分有人住,一部分没人住 * 比如11000111这么一条线段,1表示原创 2011-03-14 16:49:00 · 1237 阅读 · 3 评论 -
poj 3368 Frequent values
题意:给你n从小到大的树,查询一个区间的最长的连续长度思路:离散化,转换成rmq问题其实这个题会有三种情况(红色表示你要查询的段)1:-1 -1 11 1 1 3 3 3 3 10 10 10就是你要查询的段,刚好是完整的一段就是只有一个值,那么就是b-a+12:-1 -1 1 1 1 1 3 3 3 3 10 10 10查询区间包含了两段,答案就是这两段最长的一段3:-1 -1 1 1 1 1 3 3 3 3 10 10 10也是最麻烦的一种就是包含了多段,这也是这个题转换的关键我们可以先原创 2011-03-29 21:50:00 · 584 阅读 · 0 评论 -
hdu 1823 Luck and Love
<br />这个题是一个理解二维线段树的好题,其实二维线段树不难<br />先建立一颗线段树,然后每个节点下又有一个线段树,看看代码很容易理解的,以前总不想去看<br />先查找身高符合要求的,然后再查找活泼值符合要求中缘分值最大的<br />代码很简单,只是比普通的线段树多了点<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月30日, 下午12:59 */#include <cstdlib>#incl原创 2011-03-30 14:45:00 · 728 阅读 · 0 评论 -
poj 2828 Buy Tickets
<br />一个很好的线段树应用的题!<br />题意:有一些人去买票,但是后来的可以插队,插到自己想插的pos。<br />思路:反过来看,pos就变成了前面有多少个空位,这样就可以用线段树了<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月30日, 上午9:47 */#include <cstdlib>#include <stdio.h>#include <algorithm>#define原创 2011-03-30 10:09:00 · 645 阅读 · 0 评论 -
poj 2182 Lost Cows
<br />这个题和2828是一样的,如果不不懂的地方看http://blog.csdn.net/Euler_M/archive/2011/03/30/6287853.aspx<br />这个题只是没告诉你第一头牛应该插在那,很简单嘛,第一头牛前面肯定没有牛,所以p[1]=0<br />其它都和2828一样,思想都是反过来想,把pos变成前面有多少个空位<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月30日, 上原创 2011-03-30 10:30:00 · 528 阅读 · 0 评论 -
poj 1177 Picture 线段树+离散化+线扫描
<br />惭愧啊,还是不怎么懂,主要是lcover,和rcover,看了很多解题报告都没怎么写清楚,看陈宏的论文,感觉自己理解到了,不过写不出代码,悲剧啊。看来是我的iq有问题~<br />下面这个人写的还可以:<br />http://www.cppblog.com/abilitytao/archive/2010/07/21/120927.html<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月24日, 下午原创 2011-03-24 19:48:00 · 620 阅读 · 0 评论 -
poj 2528 Mayor's posters 正确离散化
<br />理解线段树离散化的好题<br />关于这个题离散化的问题,在discuss里有人说测试数据是错的,如果按照一般的离散化的方法去写有种数据不能过<br />1 10<br />1 5<br />8 10<br />如果像我下面的代码那样写离散化的结果<br />1 4<br />1 2<br />3 4<br />很明显6-7这条线段在离散化时被消除了<br />如果想得到正确的结果其实只用在离散化时修改一下就可以了。<br />如果这两条线段的两个端点是相邻的,cnt++<br />不相邻cnt原创 2011-03-20 11:51:00 · 949 阅读 · 0 评论 -
Light on or off
<br />一道曾经校赛的题目,也算是线段树的一道很好的题。<br />http://222.196.33.254/oj/showproblem?problem_id=1684<br /> DescriptionThere is N lights on the wall of Dreamone’s house from left to right.Initially,some lights on and some lights<br />off, and we use ‘1’ represented the原创 2011-03-18 14:30:00 · 854 阅读 · 0 评论 -
hdu 2871 Memory Control
<br />这个题和hotel很像,其中对vector的使用很巧妙,不过还有一点没弄懂,就是那个二分的写法<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月15日, 下午2:18 */#include <cstdlib>#include <stdio.h>#include <string.h>#include <vector>#define N 50005#define max(a,b)原创 2011-03-15 20:56:00 · 569 阅读 · 0 评论 -
poj 2892 Tunnel Warfare
<br />/* * File: main.cpp * Author: Mi *其实这个题得解法和3667的很相似,用lv,rv分别保存左边连续的个数和右边连续的个数 * 在询问的时候有一点要注意,if(x<=mid) 则要去判断x是不是在T[root<<1].rv中,其实判断的方式就是 * if(x>T[root<<1].r-T[root<<1].rv) 那么就可以说明x在rv中,return T[root<<1].rv+T[root<<1|1].lv因为这样的话 * 就会与原创 2011-03-15 14:08:00 · 542 阅读 · 0 评论 -
poj 2155 Matrix
<br />一个二维线段树的简单题,开始直接更新到了每一个节点,结果悲剧超时,想想也是,肯定会TLE<br />其实不用跟新每个节点,只用更新到那条线段,然后每次询问的时候也只用只用res^矩形的状态<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月30日, 下午2:55 */#include <cstdlib>#include <stdio.h>#include <algorithm>#def原创 2011-03-30 16:20:00 · 520 阅读 · 0 评论