
线段树、树状数组
ramay7
Life is not short,but float.
展开
-
POJ 2481 Cows(树状数组)
题目链接: POJ 2481 Cows 题意: 有n个区间,定义区间[a,b]大于区间[c,d]的条件为:a<=c且b>=d且b-a>d-c。 对每个区间输出大于这个n个区间中大于这个区间的区间个数。 分析: 按照区间右端点从大到小排序,相同右端点的按照左端点从小到大排序。 树状数组中保存左端点的信息,对于每个区间只要在树状数组中查找左端点<=自身左端点的区间个数就行了。 一个左端点原创 2016-03-30 13:35:12 · 452 阅读 · 0 评论 -
HDU 1255 覆盖的面积(矩形交的面积)
题目链接: HDU 1255 覆盖的面积//1832K 280MS#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <climits>#define lson(x) (x<<1)#define rson(x) ((x<<1)|1)us原创 2016-03-26 12:12:02 · 427 阅读 · 0 评论 -
HDU 1542 Atlantis(矩形并的面积)
题目链接: HDU 1542 Atlantis//1628K 0MS#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <climits>#include <algorithm>#define lson(x) (x<<1)#define rson(x) ((x<<1)|1)u原创 2016-03-26 12:13:53 · 380 阅读 · 0 评论 -
POJ 1195 Mobile phones(二维树状数组)
题目链接: POJ 1195 Mobile phones 题意: 一个S∗SS*S的矩阵,主要有种操作: ①:x,y,a将s[x][y]增加a,a可能为负值①:x,y,a 将s[x][y]增加a,a可能为负值 ②:L,B,R,T,查询L<=x<=R,B<=y<=T的所有元素和。②:L,B,R,T,查询L<=x<=R,B<=y<=T的所有元素和。 要求对每次查询输出结果。 分析: 题目原创 2016-03-26 14:40:45 · 353 阅读 · 0 评论 -
HDU 4027 Can you answer these queries?(线段树、查询区间和及修改区间数为数的平方根)
题目链接: HDU 4027 Can you answer these queries? 分析: longlong longlong范围内每个数最多开8次方就会变为1,当当前区间所有数都变为1了,就不需要更新了。#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorit原创 2016-04-29 01:16:54 · 502 阅读 · 0 评论 -
HDU 5245 Joyful(线段树、查询区间和及修改区间每个数为数的平方)
题目链接: HDU 5245 Joyful 题意: 查询区间和及修改查询区间,将每个数都变为数的平方。模数是92233720347072921609223372034707292160。#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>#includ原创 2016-04-29 01:12:39 · 1061 阅读 · 0 评论 -
UVALive 6838 Flipping Parentheses(线段树、单点更新、区间查询)
题目链接: UVALive 6838 Flipping Parentheses 题意: 给出一个长度为n个串,每个字符只能是’(‘或’)’,而且左括号和右括号个数相等,在操作的过程中,要保证这个串的任意前缀串的左括号个数都要大于等于右括号的个数。 有Q个操作。每次操作输入一个坐标t将(坐标从1~n)这个坐标下的括号取反,即左括号变右括号,右括号变左括号。 对每次输入输出最靠前的一个坐标,使原创 2016-04-17 23:32:47 · 551 阅读 · 0 评论 -
Codeforces 629 D Finals in arithmetic(最大上升子序列和,O(nlogn)、线段树/树状数组)
题目链接: Codeforces 629 D Finals in arithmetic 题意: 已知nn块圆柱形蛋糕的底面圆半径和高,需要利用这些蛋糕尽可能堆成一个体积最大的蛋糕,但是需要满足:编号大的蛋糕只能放在编号比它小的蛋糕上面或者桌子上上面蛋糕的体积必须严格大于下面蛋糕的体积求最终堆成的蛋糕的最大体积? 数据范围:1 ≤ n ≤ 100 000,ri≤104,hi≤1041 \原创 2016-07-25 10:52:21 · 643 阅读 · 0 评论 -
FZU 2163 多米诺骨牌(线段树)
题目链接: FZU 2163 多米诺骨牌 题意: 一条水平线上竖直放置nn个多米诺骨牌,给出每个骨牌的坐标x[i]x[i]和高度y[i]y[i]。每个骨牌向右倒会砸到某些多米诺骨牌,如果多米诺骨牌(初始坐标x[i]x[i]和高度y[i]y[i])倒下,会导致所有在[x[i]+1,x[i]+y[i]−1][ x[i] + 1,x[i] + y[i] - 1]范围内的多米诺骨牌倒下。求每个骨牌最原创 2016-07-29 12:55:35 · 1531 阅读 · 0 评论 -
POJ 1177 Picture(矩形并的周长)
题目链接: POJ 1177 Picture//926K 16MS#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <climits>#define lson(x) (x<<1)#define rson(x) ((x<<1)|1)us原创 2016-03-26 12:10:07 · 490 阅读 · 0 评论 -
HDU 1540 Tunnel Warfare(单点更新,区间合并)
题目链接: HDU 1540 Tunnel Warfare 吐槽:if(goal<=segtree[rson(cur)].left+segtree[rson(cur)].left_max-1)这一行代码起初少写了一个"−1""-1",WA到吐血!!!!!!//4012K 327MS#include <cstdio>#include <cstring>#include <cmath>#in原创 2016-03-25 22:53:43 · 386 阅读 · 0 评论 -
POJ 2352 Stars(树状数组)
题目链接: POJ 2352 Stars 题意: 每个星星的level是纵坐标小于等于它并且横坐标小于它的星星的数量。按照y从小到大,其次x从小到大的顺序给出n个星星的坐标,输出level从0到n-1的星星的数量。 分析: 由于给出的坐标是优先按照y排序的,那么直接对每个星星查找x的树状数组值然后更新就好了。//556K 375MS#include <cstdio>#include <原创 2016-03-25 22:49:32 · 377 阅读 · 0 评论 -
POJ 3067 Japan(树状数组)
题目链接: POJ 3067 Japan 题意: 左列有n个点,右列有m给点。点的编号都是从1开始,然后有k条线段a–b,表示连接左列的a和右列的b, 问这些线段的交点一共有多少?保证交点处有且仅有两条线段相交。 分析: 按照对m端点编号降序排列,m端点编号相同对n端点编号降序排列。 从0到k遍历这些线段,树状数组中保存n端点信息,对于线段i只需要查询树状数组中n端点<=a[i]的线段原创 2016-03-30 17:22:25 · 466 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number(线段树/归并排序求逆序对数)
题目链接: HDU 1394 Minimum Inversion Number 题意: 给出一组数,可以将每个数组首的数依次移到数组尾,求整个过程中(包括初始状态)的最少逆序对数。 分析:用线段树求初始数组的逆序对数。对每个读入的数在线段树中查询之前有多少比它大的数字出现,那么这就是该数的逆序对数,累加就是整个初始数列的逆序对数。然后将读入的数插入到线段树叶子结点中,(指该数字已经出现了)原创 2016-03-19 22:59:52 · 406 阅读 · 0 评论 -
POJ 2029 Get Many Persimmon Trees(二维树状数组)
题目链接: POJ 2029 Get Many Persimmon Trees 题意: 给一个width*height的方格,然后有n个点x[i]和y[i]表示在对应的方格位置上有一个点,问在方格中画一个row*col的矩形最多能圈住多少点?数据范围:width、height<=100,n<=500. 分析: 用二维树状数组存点的数量,然后遍历每一个点就好了。二维dp也能做。//388k原创 2016-03-31 22:06:44 · 379 阅读 · 0 评论 -
HDU 2795 Billboard(线段树,单点查询)
题目链接: HDU 2795 Billboard 题意: 有个高为h宽为w的墙用于贴宣传海报,每张海报高为1,宽为wi,每张海报在能张贴的情况下优先选择最上面的最左面; 共有n张海报,问贴每张海报所在的行,如果贴不下,就输出-1. 分析; 建立区间为[1,h]的线段树,叶子结点即表示相应层。线段树中存储当前所有层中的最大剩余长度, 查询和更新操作其实放在一起了。 玩玩没想到的是,题目原创 2016-03-20 20:14:50 · 329 阅读 · 0 评论 -
POJ 2886 Who Gets the Most Candies?(线段树、模拟)
题目链接: POJ 2886 Who Gets the Most Candies? 题意 : 【懒得自己写了,直接抄网友的了o(╯□╰)o】 N个熊孩子围成一个圈,从第K个开始淘汰,每淘汰一个,出示手中的数字,决定下一个淘汰者,正数表示左手第n个,负数反之。每个人可以拿到的存活回数的因数个数的糖果,求拿到最多糖果数的孩子的名字以及糖果数。 分析: 先通过打表的方法得到每个区间里的拥有最大原创 2016-03-26 22:50:55 · 301 阅读 · 0 评论 -
POJ 3368 Frequent values(线段树/RMQ)
题目链接: POJ 3368 Frequent values 题意: 给一串非降序数字序列,然后有Q个查询,每次查询区间[a,b]内的最大连续相同数字长度,数组下标从1开始。 如数字序列为:-1 -1 1 2 2 2 ,区间[1,3]内的最大连续相同数字长度为2,而区间[3,6]内的答案为3. 分析: ①用线段树存储树中区间的最大连续相同区间长度。在建树和查询区间被左右儿子“瓜分”的时候原创 2016-04-04 21:06:17 · 657 阅读 · 0 评论 -
CF 629D Babaei and Birthday Cake(线段树单点更新)
题目链接: CF 629D Babaei and Birthday Cake 题意: 给出n个圆柱形蛋糕的半径和高,设两个蛋糕的序号分别为i,j,体积分别为val[i]和val[j],当i>j并且val[i]>val[j]时,第i块蛋糕可以放在第j块蛋糕上面;给出n个圆柱形蛋糕的半径和高,设两个蛋糕的序号分别为i,j,体积分别为val[i]和val[j],当i>j并且val[i]>val[j]原创 2016-03-24 18:53:53 · 468 阅读 · 0 评论 -
POJ 2299 Ultra-QuickSort(逆序对数,线段树/树状数组/归并排序)
题目链接: POJ 2299 Ultra-QuickSort/*************Segment Tree Solution**************///19700K 1282MS#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#define lson(x) (x<<1)#def原创 2016-03-25 19:13:24 · 384 阅读 · 0 评论 -
Codeforces Round #368 (Div 2) A,B,C,D,E
比赛题目链接A.Brain’s Photos给一个$n*m$的方格,判断是黑白色还是彩色:只要含有字母’C’,’M’,’Y’中任意一个就认为是彩色的。 暴力判断,时间复杂度:$O(n*m)$。#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include原创 2016-08-22 13:31:35 · 500 阅读 · 0 评论