线段树专辑
呆呆的人v
这个作者很懒,什么都没留下…
展开
-
poj 2777 : Count Color (线…
学习了!!原文地址:2777 : Count Color (线段树)">poj 2777 : Count Color (线段树)作者:依然题意:长度为n(1~100000)个单位的画板,有t(1~30,位运算的可能性)种颜料。现在叫你完成m组操作: 1. "C A B C" Color the board from segment A to segment B with color转载 2013-04-23 09:24:24 · 365 阅读 · 0 评论 -
poj 2352 Stars(树状数组)
题意:给出每个star的坐标,求出在它左下方这个区域里有多个星星思路:用树状数组做 简洁明了。。。。//420K 157MS#include #include #define lowbit(x) (x&(-x))#define M 32010int ar[M],n;void add (int u,int w){ while (u {原创 2013-04-23 09:25:10 · 456 阅读 · 0 评论 -
poj 3067 Japan(树状数组)
题意:东西两岸有N,M座城市 从北到南标号分别为1...N or M 在它们之间建铁路,每个站最多只能有两条铁路求总的交点数思路:各连线按x降序(x相同,y降序)重排 再以y 建树状数组 注意有重边的情况比如:31 2 21 21 2输出应是 0还有要用__int64存//2764K 516MS#include #include #include #defi原创 2013-04-23 09:25:14 · 468 阅读 · 0 评论 -
poj 2155 Matrix (二维树状数组)
这道我没什么想说的,看解题报告的//4456K 485MS#include #include #define lowbit(x) (x&(-x))#define M 1050int ar[M][M];int n;void updata (int i,int j){ inttmp; while (i> 0) { tmp = j;原创 2013-04-23 09:25:25 · 450 阅读 · 0 评论 -
hdoj 1754 I Hate It(线段树)
第一道自己写的线段树的题,虽然很简单但也留个记念吧#include #define M 200005struct data{ intl,r,max;}line[3*M];int num[M];int max(int a,int b){ return a> b?a:b;}void buildtree(int left,int right,intu) /原创 2013-04-23 09:24:17 · 410 阅读 · 0 评论 -
poj 3468 A Simple Problem with I…
题意:在一组数中执行两种操作"C a b c" means adding c to each ofAa, Aa+1, ... ,Ab. -10000 ≤ c ≤ 10000."Q a b" means querying the sum ofAa, Aa+1, ... ,Ab.思路:很典型的线段树 开始我用普通的线段树做 updata 操作是每一对应的区间都加上w 结果TLE问了一原创 2013-04-23 09:24:19 · 352 阅读 · 0 评论 -
poj 3264 Balanced Lineup(线段树)
题意:求一个区间A到B内牛的最大高度差?思路:又是一道经典的线段树 比前面的两道要简单,没有更新操作//2416K 1579MS#include #define M 50005struct data{ intl,r; inttall,shor;}line[3*M];int num[M];int min (int a,int b){ re原创 2013-04-23 09:24:22 · 390 阅读 · 0 评论 -
poj 3321 Apple Tree(树状数组)
题意:一棵具有n个节点的树,一开始,每个节点上都有一个苹果。现在给出m组动态的操作:(C,i)是摘掉第i个节点上面的苹果(若苹果不存在,则为加上一个苹果),(Q,i)是查询以第i个节点为根的子树有几个苹果(包括第i个节点)。 思路:树状数组。这道题重点怎么建立树到树状数组的映射关系:利用dfs遍历树,对每个节点进行两次编号,第一次搜到第i个节点时的深度dep,为这个节点管辖区间的上限low原创 2013-04-23 09:25:05 · 424 阅读 · 0 评论 -
poj 2828 Buy Tickets(线段树)
思路:从后往前插,pos表示他前面有多少的空位,叶子结点存他的val 这样就转化到线段树上 然后就简单了//10736K 1641MS#include #define L(x) (x#define R(x) ((x#define M 200050int loc[M],k;struct tree{ intl,r; intval,pos;//pos表示当点原创 2013-04-23 09:25:16 · 444 阅读 · 0 评论 -
poj 1195 Mobile phones(二维树状…
题意:讲的是在一个S*S的正方形内,有两种操作 1 X Y A 是在(X,Y)这个点加A2 X1 Y1 X2 Y2 查询(X1,Y1) 到 (X2,Y2) 这范围内手机的数量其中 开始是 0 s 表示有一个S*S的区域 3表示结束思路:简单的二维树状数组 ans = sum(x2+1,y2+1) - sum(x2+1,y1) - sum(x1,y2+1) + sum (x1,原创 2013-04-23 09:25:23 · 335 阅读 · 0 评论 -
hdu 1394 Minimum Inversion Number(线段树)
题意:有0~n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,每得到一个序列都可得出该序列的逆序数(如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数)。要求求出最小的逆序数。思路:(一直在做线段树的题,看列表里有这一题。想了很久不会,看解题报告做出来的。)说一下自己原创 2013-07-16 16:19:19 · 398 阅读 · 0 评论 -
poj 2528 Mayor's posters(线段树+离散化)
题意:有一块足够长的墙了给竞选人贴海报,后贴的可能会把衣面贴的给覆盖掉,问最有多少不同的海报是能看到的。思路:线段树,因为坐标范围太大,无法表示,得离散化。1.如何离散化。个人觉得 离散化是件危险的事,因为每次都会漏掉特殊情况,如此题若样列为1 61 25 6用unique离散后就得如下对应关系1 1 2 5 6 6 0 1 2 3如此求得的答案原创 2013-07-18 10:16:43 · 472 阅读 · 0 评论 -
UVALive 4329 Ping pong(解法二:树状数组)
思路详解参见:http://blog.sina.com.cn/s/blog_691ce2b70101lolv.html这里用树状数组实现,时间要快很多。//0 KB 113 ms#include #include #define lowbit(x) (x &(-x))const int M = 100005;const int N = 20005;int ar[原创 2013-07-31 11:51:47 · 489 阅读 · 0 评论 -
UVALive 4329 Ping pong(线段树)
题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13895题意:一条街上住有n个乒乓选手,他们有一个技能值,现在每场比赛要3个人,两个选手,一个裁判;裁判须住在他们之间,且其技能值必须在两选手之间,求一其能组织多少种比赛。思路:首先,每个人能组织的比赛数量为 其左边技能比他小的人的数量*右边比他大的 +左边比原创 2013-07-31 10:58:48 · 636 阅读 · 0 评论 -
poj 3277 City Horizon(线段树+离…
题意:有多栋建筑 它们有不同的高度 从一个面看进入 能看到的总面积3277 City Horizon(线段树+离散化)" />思路:线段树+离散化 因为它们的宽度太大,无法存储 所以得离散PS:这道题又学到了一些新知道 1、另一种离散化的方法 2、unique 函数的使用 unique(first,last)参数 first, last:指出要剔除连续重复元素的迭代器区间[first原创 2013-04-23 09:24:59 · 427 阅读 · 0 评论 -
poj 3667 Hotel(线段树)
题意:bessie 有间旅店有N个房间 每次有一组人来住宿,他们需要连续的房间 。bessie要求你帮他个忙,有以下操作op a :如果op == 1 表示有a个人要住宿 要求你找出a个连续的房间 起始房间的号数要求最小,如果没有返回0op a b :op == 2 表示从a号房起有b个人有退房 即 a到a+b-1 的房间将置空。思路:超经典的线段树 这道题跟上一道Hotel很像,但稍微复原创 2013-04-23 09:24:50 · 407 阅读 · 0 评论 -
hdoj 1698 Just a Hook(线段树)
题意:dota中的英雄 Pudge 有一hook 这hook 可由三种材料构成 分别如下For each cupreous stick, the value is 1.For each silver stick, the value is 2.For each golden stick, the value is 3.现输入 x y z 表示x到y的hook 的值变为z 。z如上如述求最原创 2013-04-23 09:24:48 · 384 阅读 · 0 评论 -
zoj 1610 Count the Colors(线段…
题意:给一块长8000米的板上色 问最后能看见几种颜色 而每种颜色的几段思路:线段树。这道题有很多细节eg: 0 2 1 3 4 1output 应该是 1 2 因为中间隔了一段空的具体见代码#include #include #define M 8005#define L(x) (x#define R(x) ((xstruct data{ intl原创 2013-04-23 09:24:57 · 388 阅读 · 0 评论 -
hdoj 1166 敌兵布阵(树状数组)
这一道用树状数组写的#include #include #define lowbit(x) (x&(-x))#define M 50050int ar[M],n;void add (int u,intw) { while (u //从该结点到根结点都加上w { ar[u] += w; u += lowbit(u);原创 2013-04-23 09:25:03 · 387 阅读 · 0 评论 -
poj 2481 Cows(树状数组)
题意:有N头牛 它个每个都有一个领域[S,E] 如果 Si <= Sj and Ej思路:跟前一道2352 stars 想法差不多,给E降序排序,ifE相同,S升序,这样就转化到stars那道题了 不过这里要注意一个问题 Ei == Ej andSi == Sj的情况,//2120K 969MS#include #include #include #define l原创 2013-04-23 09:25:12 · 385 阅读 · 0 评论 -
poj 1177 Picture(线段树+离散化+…
题意:求矩形周长的并思路:第一回遇见 用到扫描线的题 找了资料和看解题报告才弄懂 (PS:解题报告都不附注释的。。。)详细讲一下扫描线的使用吧 为自己也为以后要学的人一点帮助1.将排序后的seg数组依次输入,执query函数 flag = 1 为插入边,flag = -1 为出边 修改 count的值同时更新len和line2.每扫描一次,就要计算一次周长pmt,这里我们以图中的例子原创 2013-04-23 09:25:18 · 430 阅读 · 0 评论 -
poj 1151 Atlantis (线段树+离散+…
题意:求多个矩形的面积的并思路:经典的问题,跟前一题求矩形周长的并类似,但这里是浮点型的 要注意这一点//188K 0MS#include #include #include #define L(x) (x#define R(x) ((x#define exp1e-6 // 这里用这个只是担心精度问题,发现这题不需要这样也行const int M =原创 2013-04-23 09:25:21 · 394 阅读 · 0 评论 -
HDU 3397 Sequence operation(线段…
题意:给个一只有0,1 的序列,有以下5种操作0 a b change all characters into '0's in [a , b] //把a,b间的都改为01 a b change all characters into '1's in [a , b] //把a,b间都改为12 a b change all '0's into '1's and change all '1's i原创 2013-04-23 09:27:38 · 406 阅读 · 0 评论 -
poj 2892 Tunnel Warfare(线段树…
题意:抗日时期,八路军擅用地道把村落连起来,现指挥官要知道一些信息:对地道的操作如下D x 表示销毁x这个地道Q x 表示查询有多少个地道与x相连R 修复最后被摧毁的地道思路:线段路,记录每个结点左边 中间,右边 连续的地道数量。//3412K 266MS#include #define M 50050#define L(x) (x#define R(x) ((原创 2013-04-23 09:24:52 · 400 阅读 · 0 评论 -
hdoj 3074 Multiply game(线段树…
题意:两种操作0 k1 k2; you need to work out the multiplication of the subsequencefrom k1 to k2, inclusive.1 k p; the kth number of the sequence has been change to p.(1思路:线段树 跟前面做的几道对比 有点简单了 但要注意要用__int原创 2013-04-23 09:24:55 · 355 阅读 · 0 评论 -
poj 3321Apple Tree (解法2:线段…
题意思路见上一篇 主要难在建树上,有人说这不一定是根二叉树 但我却用二叉树 做对了,可能是他代码写得不对吧//8184K 563MS#include #include #define L(x) (x#define R(x) ((x#define M 100010int head[M],vis[M],low[M],high[M];int p,dep,n;struct原创 2013-04-23 09:25:08 · 337 阅读 · 0 评论 -
HDU 4339 Query (线段树)
题意: 有两个字符串,给出 Q 个询问,每个询问有两种体式格式:1 p i c 把第 p 个字符串的第i 个字符换成 字符 c,2i 从第位i 开始,两个字符串连续相同的子串的最大长度为多少。思路:普通的查找肯定超时,所以用线段树 复杂度大概为O(n + Qlog(n))每个结点保存该区间内第一个不匹配的下标,query时,只需找到与key(要查找的点) 最近的一个下标 相减就原创 2013-04-23 09:27:03 · 565 阅读 · 0 评论 -
poj2886 Who Gets the Most Candie…
题意:N个人围成一圈第一个人跳出圈后会告诉你下一个谁跳出来跳出来的人(如果他手上拿的数为正数,从他左边数A个,反之,从他右边数A个)跳出来的人所得到的糖果数量和他跳出的顺序有关 所得的糖果数为 (假设他是第k个跳出的) 则他得到的糖数为k能被多少个数正数 比如说 k= 6 ; 6 = 1*2*3*6 所以他得到的糖数为4;思路:线段数 先算出N个人中,是第几个人(id)跳出来得到的糖果最原创 2013-04-23 09:27:07 · 557 阅读 · 0 评论 -
poj 3368 Frequent values(线段树)
不会做,看了别人的想法 做的详见原文 http://blog.sina.com.cn/s/blog_6635898a0100kzpx.html#include #define M 100005struct data{ intl,r,max;}node[3*M];struct da{ intstart,end;}seg[M];int num[M],ha原创 2013-04-23 09:24:28 · 360 阅读 · 0 评论 -
UVA 12299 RMQ with Shifts(线段树)
题意:有一数组A是可变的,支持shift(i1,i2,...,ik),表示把元素A[i1],A[i2],....,A[ik],循环左移一位。query(L,R);是询问区间[L,R]的最小值。思路:这是道比较简单的线段树问题,把循环的更改的值依次单点更新即可。//0 KB 258 ms#include#include#define L(u) (u<<1)#defi原创 2013-08-01 17:56:46 · 522 阅读 · 0 评论