线段树
文章平均质量分 57
xiamiwage
这个作者很懒,什么都没留下…
展开
-
POJ 2299 && ZOJ 2386 Ultra-QuickSort 线段树
//POJ 2299 && ZOJ 2386 Ultra-QuickSort 线段树/*题意:给一个序列,序列中的数都不重复,每次可以将序列中的两个数交换,求将这个序列变成升序序列的最小交换次数思路:其实就是求这个序列的逆序数,离散化后边查询边插入即可注意ans会爆int*/#include#include#include#define lson rt<<1,l,mi原创 2012-10-02 23:46:28 · 1166 阅读 · 0 评论 -
HDOJ 1166 敌兵布阵 线段树: 单点更新 成段求和
//HDOJ 1166 敌兵布阵 线段树: 单点更新 成段求和/*题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1166题意: N个工兵营地(N<=50000),已知每个工兵营地的初始人数, M次(M<=40000)操作 : 1、在第i个营地增加j个人; 2、在第i个营地减少j个人;原创 2012-10-09 10:36:02 · 650 阅读 · 0 评论 -
HDOJ 1754 I Hate It 线段树:单点替换 成求段最值
//HDOJ 1754 I Hate It 线段树:单点替换 成求段最值/*题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1754题目大意:有n(0<n<=200000)个学生,已知每个学生的初始成绩。 有m(0<m<5000)次操作: 1、将a学生的成绩改为b; 2、查询区间[a,b]中成绩最高的思路:线段树叶子结点记录每个原创 2012-09-22 23:59:54 · 1673 阅读 · 0 评论 -
HDOJ 1394 Minimum Inversion Number 线段树 : 单点更新 成段求和
//HDOJ 1394 Minimum Inversion Number 线段树 : 单点增加 成段求和/*题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1394题意:已知一个数列,数列个数n<=5000,数列中的数的范围在[0,n-1],并且数不重复。每次可以将数列的第一个数移动到最后面,这样可以构造出n个数列。求这这n个数列中的最小原创 2012-09-22 23:56:42 · 843 阅读 · 0 评论 -
HDOJ 1556 Color the ball 线段树 : 成段更新 单点查询
//HDOJ 1556 Color the ball 线段树 : 成段更新 单点查询/* 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1556题目大意:n(n<=100000)个气球从左到右排列,每次在[a,b]区间上涂一次颜色, m次操作后,问第i个气球一共被涂过几次颜色。思路:成段更新*/#include#include原创 2012-09-23 23:47:59 · 1004 阅读 · 0 评论 -
HDOJ 3333 Turing Tree 线段树 单点更新 成段查询
//HDOJ 3333 Turing Tree 线段树 单点更新 成段查询/*题意:求某区间没所有值不同的数的总和思路:先对所有的询问按照区间末尾排序 然后从序列前面开始遍历,当遇到相同的元素的时候 将前面的元素删除,这样保证有重复的元素一定出现在距离区间末尾最近的 转化后就变成简单的单点更新 区间求和了 数据较大 要离散化处理*/#include#in原创 2012-09-24 23:33:32 · 744 阅读 · 0 评论 -
HDOJ 4417 Super Mario 线段树 单点更新 成段查询
//HDOJ 4417 Super Mario 线段树 转化为单点更新 成段查询/*题意:查询区间内小于等于某数的数的总和思路:离线查询,先记录所有的询问并排序,然后一边删一边查,查之前把不满足的删掉 就转化为简单的单点更新,成段求和。*/#include#include#include#define lson rt<<1,l,mid#define rson rt<原创 2012-09-24 23:34:15 · 748 阅读 · 0 评论 -
HDU 2871 Memory Control 线段树 区间合并 单点更新 容器的使用
//HDU 2871 Memory Control 线段树 : 区间合并 单点更新 容器的使用/*题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2871题目大意:现在有1到N(N <= 50000)个连续内存块,然后给出四种操作: 1. Reset 释放所有内存块,并且输出“Reset Now”。 2. New x 找到一块有连续x块原创 2012-09-23 23:54:44 · 836 阅读 · 0 评论 -
HDOJ 3911 Black And White 线段树 区间合并 成段更新
//HDOJ 3911 Black And White 线段树 区间合并 成段更新/*题意:有一堆黑、白球排成一排,有两种操作: 1:将一段连续的球改变颜色,黑色变成白色,白色变成黑色 2:查询一段区间内连续的黑色的球的个数 思路:每个结点记录7个信息: lsum0:从左端开始的连续的白球个数 rsum0:从右端开始的连续的白球个数 msum0:区间内连续的原创 2012-09-26 00:02:19 · 970 阅读 · 0 评论 -
HDOJ 4107 Gangster 线段树 成段更新变化
//HDOJ 4107 Gangster 线段树 成段更新变化/*题意:n个数,初始都是0,m次更新操作: 若元素a[i] < p,则a[i]+=c,否则a[i]+=2*c 最后输出所有的数字思路:当一个区间内的最大值mmax<p,则该区间内所有的数都+c,朴素的成段更新 当一个区间内的最小是mmax>=p,则该区间内的所有的数都+2*才,朴素的成段更新 不满足的话原创 2012-09-26 00:02:54 · 752 阅读 · 0 评论 -
POJ 3667 Hotel 线段树 区间合并(成段更新)
//POJ 3667 Hotel 线段树 区间合并(成段更新)/*题目大意:有n间房子,有两种操作: 1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 2 a b:将[a,a+b-1]的房间清空思路:记录区间中最长的空房间 ,线段树操作: update:区间替换 query:询问满足条件的最左端点 ,线段树每个节点记录 3个参数 : lsum :左端开始的空余量原创 2012-09-23 23:51:02 · 816 阅读 · 0 评论 -
POJ 1195 Mobile phones 线段树 二维线段树 单点更新 区间求和
//POJ 1195 Mobile phones 线段树 二维线段树 单点更新 区间求和/*题意:一个矩阵,初始化为0,两种操作:1、将某点增加val2、查询一个子矩阵的和思路:二维线段树,单点更新,区间求和,记得pushup.*/#include#include#include#define N 1050#define lson rt<<1,l,mid#defi原创 2012-10-04 00:23:08 · 904 阅读 · 0 评论 -
POJ 3067 Japan 线段树 转化
//POJ 3067 Japan 线段树 转化/*题意:有一幅图,左边m个结点,右边n个结点,给出k条边连接左边结点和右边结点 求这些边相互交叉的个数,一个点只会有两条边经过思路:同样将线段转化成点然后放在二维平面图上,对于两条线段[si,ei],[sj,ej]满足交叉的条件是siej || si>sj&&ei<ej两条线段如果同起点或者同终点是不会相交的所以这样就转化为原创 2012-10-02 23:46:10 · 677 阅读 · 0 评论 -
ZOJ 1610 Count the Colors 线段树 成段更新 单点求值
//ZOJ 1610 Count the Colors 线段树 成段更新 单点求值/*题意:有一个0-8000的区间,每次将一个子区间染色,颜色用整数表示,如果一段区间被重复染色的话,它的颜色会被后面染上去的颜色覆盖问最后有几种颜色出现,每种颜色的区间有多少个思路:注意是对区间染色,不是对点染色。成段更新 单点求值由于不需要知道父节点的信息,所以不需要pushup。*/#原创 2012-10-03 00:26:25 · 1271 阅读 · 0 评论 -
HDOJ 1823 Luck and Love 二维线段树 单点更新 成段求最值
//HDOJ 1823 Luck and Love 二维线段树 单点更新 成段求最值/*题意:当操作符为‘I’时,表示有一个MM报名,后面接着一个整数,H表示身高,两个浮点数,A表示活泼度,L表示缘分值。 (100<=H<=200, 0.0<=A,L<=100.0)当操作符为‘Q’时,后面接着四个浮点数,H1,H2表示身高区间,A1,A2表示活泼度区间,输出符合身高和活泼度要求的MM中原创 2012-10-03 23:08:36 · 1119 阅读 · 0 评论 -
POJ 2352 Stars 线段树 单点更新 成段求和
//POJ 2352 Stars 线段树 单点更新 成段求和/*题意:给一系列点(按y递增,y相同时按x递增排列),level指不超过当前点的高度且不在当前点右边的点的个数 求level值分别为0,1,2,..n-1的个数思路:由于题意已经是按顺序给的点,所以直接按x轴建树 注意x从0开始,线段树从1开始,所以x全部+1处理*/#include#include#inc原创 2012-10-02 23:45:16 · 750 阅读 · 0 评论 -
HDOJ 4000 Fruit Ninja 线段树+数学
//HDOJ 4000 Fruit Ninja 线段树+数学/*题意:有一个数列a[],当下标满足i<j<k时候,满足a[i]<a[k]<a[j]个总数 -->x=a[i]; y=a[j]; z=a[k]; -->x<z<y 思路:(线段树操作很简单,数学转化不好想) x x<(y?z) - x<y<z; //(y?z)表示y、z大小不确定 一边更新,一边查原创 2012-10-04 00:23:22 · 633 阅读 · 0 评论 -
POJ 3264 Balanced Lineup 线段树 单点更新 求区间最值
//POJ 3264 Balanced Lineup 线段树 单点更新 求区间最值/*题意:求区间最大值最小值之差*/#include#include#include#define INF 100000000#define N 50005#define lson rt<<1,l,mid#define rson rt<<1|1,mid+1,rint n,m;int原创 2012-10-04 00:23:33 · 828 阅读 · 0 评论 -
POJ 2481 Cows 线段树
//POJ 2481 Cows 线段树/*题意:给n条线段(S,E),问每条线段中包含几条线段 线段i包含线段j的定义是Si Ej - Sj思路:将线段转化为点,这样问题就转化为问某点的左上方有多少个点就和POJ 2352 Stars相似了由于问的是左上方,所以点的排序应先按照y从大到小,再按x从小到大排照样按x轴建树,同样要注意这里的x从0开始,要处理下一个要注意的是原创 2012-10-02 23:45:55 · 1578 阅读 · 0 评论 -
POJ 2155 Matrix 二维线段树 奇妙的成段更新 单点查询
//POJ 2155 Matrix 二维线段树 奇妙的成段更新 单点查询/*题意:有一个n*n的矩阵,初始化全部为0。有2中操作;1、给一个子矩阵,将这个子矩阵里面所有的0变成1,1变成02、询问某点的值思路:二维线段树,一维线段树的成段更新需要lazy。引申到二维线段树应该需要一个lazy,一个sublazy,可是这里什么都不用。奇妙之处在于这题的操作是异或,当某一段区间需要原创 2012-10-03 00:27:05 · 1806 阅读 · 0 评论 -
POJ 2029 Get Many Persimmon Trees 二维线段树 单点更新 区间求和
//POJ 2029 Get Many Persimmon Trees 二维线段树 单点更新 区间求和/*题意:一个0,1矩阵,在其n*m的子矩阵中找出含有1最多的,输出最多的数量思路:二维线段树*/#include#include#include#define N 105#define lson rt<<1,l,mid#define rson rt<<1|1,mid+1原创 2012-10-03 00:27:40 · 1055 阅读 · 0 评论 -
FAFU 1100 线段树 二维线段树 单点更新 区间求和
//FAFU 1100 线段树 二维线段树 单点更新 区间求和/*题意:一个矩阵,初始化为0,两种操作:1、将某点增加val2、查询一个子矩阵的和思路:二维线段树,单点更新,区间求和,记得pushup.*/#include#include#include#define N 1050#define lson rt<<1,l,mid#define rson rt<<1原创 2012-10-02 23:46:53 · 1231 阅读 · 1 评论 -
HDOJ 4288 Coder 线段树 vector偷懒做法
//4288 Coder 线段树 vector偷懒做法/*题意:给一个序列,每次有3种操作: 1、往有序集合中增加一个原素x 2、把集合中的元素x 3、查询集合中下标%5=3的元素的总和思路:vector*/#include#include#include#include#include#includeusing namespace std;char o原创 2012-10-05 00:48:40 · 910 阅读 · 0 评论 -
HDOJ 2492 Ping pong 线段树+离散化
//2492 Ping pong 线段树+离散化/*题意:有一陀人从左到右排成一排,每个人有一个唯一的技能值,每个人都找其他人比赛,比赛前要再找一个人做裁判,裁判的技能值不能比这两个人都高,也不能比这两个人都低,并且这两个人到裁判的距离总和不能大于他们之间的距离,不同的人比赛或者比赛时候的裁判不同算不同的比赛,求一共能比几场思路:由题意知道裁判必须在这两个人中间枚举每一个人做裁原创 2012-10-05 00:48:58 · 818 阅读 · 0 评论 -
CodeForces 91B Queue 线段树 单点更新 成段查询
//CodeForces 91B Queue 线段树 单点更新 成段查询/*题目地址:http://codeforces.com/problemset/problem/91/B题意:有n个数的失望值,失望值的定义是:离它最远的比它小的数 与 它本身之间 间隔的数的数量思路:线段树,结点保存区间最小值每次将当前的数更新为INF,然后查找整个区间内最右边的比它小的数的下标*/原创 2012-10-05 00:49:10 · 1344 阅读 · 0 评论 -
uva 12501 - Bulky process of bulk reduction 线段树 不好想
//uva 12501 - Bulky process of bulk reduction/*题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3945题意:一个数列a[],初始化所有元素为100,有两种操作:1、更新操作:将一段连续的区原创 2012-10-08 00:06:31 · 725 阅读 · 0 评论 -
HDOJ 3874 Necklace 线段树 单点更新 成段查询
//HDOJ 3874 Necklace 线段树 单点更新 成段查询 /*题意:求某区间没所有值不同的数的总和思路:先对所有的询问按照区间末尾排序 然后从序列前面开始遍历,当遇到相同的元素的时候 将前面的元素删除,这样保证有重复的元素一定出现在距离区间末尾最近的 转化后就变成简单的单点更新 区间求和了 数据较大 要离散化处理*/#include#includ原创 2012-09-26 00:01:41 · 832 阅读 · 0 评论