线段树
youthinkwu
这个作者很懒,什么都没留下…
展开
-
HOJ 2687 Candy
有N个箱子,每个箱子有一定数目的糖果,负数则要放入糖果,现在每次换一个箱子的糖果数目,求每次修改后,连续开一些箱子能得到的最大糖果数目。 这题就是线段树单点修改,求区间最大和。维护4个数组,sum、suml,sumr,summ,代表区间和,区间左边最大和,区间右边最大和,区间最大和。#include <iostream> #include <cstring> #include <cstdio> #原创 2015-02-19 15:27:27 · 239 阅读 · 0 评论 -
HOJ 2682 Magic-Pen2
N条单位线段,一开始是白色,画过一个区域,白色变成黑色,黑色变成白色。问经过一系列操作后,白色线段的个数。 做法:线段树区间修改,lazy,每次标记都取反,然后用区间-之前的颜色的个数就变成现在颜色的个数。 #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #define lson l,m,原创 2015-02-19 15:04:29 · 274 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number
给出一列数,可以按照循环移位的方式改变它们的顺序,求他们的最小逆序数。 可以用线段树或者树状数组来求最开始的逆序数,得到之后可以推出剩下的所有的逆序数,求min就可以了。#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #define lson l,m,rt<<1 #define rson m原创 2015-02-19 16:09:40 · 211 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers
区间修改,区间求和。用线段树维护区间和,区间修改打lazy标记。#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int maxn = 111111; using namespace原创 2015-02-19 15:43:15 · 145 阅读 · 0 评论 -
HDU 1754 I Hate It
单点修改,区间查询最大值。用线段树查询最大值。#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int maxn = 222222; using namespace std; int原创 2015-02-19 15:38:41 · 178 阅读 · 0 评论 -
HDU 1166 敌兵布阵(线段树)
单点修改,区间求和,用线段树维护区间和。#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define maxn 51111 using namespace std; int sum[maxn<原创 2015-02-19 15:36:18 · 270 阅读 · 0 评论 -
HOJ 2681 Magic-Pen1
N条单位线段一开始全是白色。有操作使得[l,r]变成黑色或者白色,问最后白色的单位线段的个数。 线段树区间修改,lazy。黑色用0表示,白色用1,这样维护一个sum表示白色个数就可以了。#include <cstdio> #include <algorithm> using namespace std; #define lson l , m , rt << 1 #define rson m + 1原创 2015-02-19 01:40:35 · 251 阅读 · 0 评论 -
POJ 2777 Count Color
给出一个长为L的板,分成L个区域,一开始板的颜色是1,现在有T种颜色,O个操作,操作有两种,一种是把区间[l,r]的板涂成颜色c,一个操作是求区间[l,r]里不同颜色的个数。 解法:线段树,因为颜色只有不到30种,可以用int状压,线段树就用来维护这个状压值。区间更改,用lazy;#include <iostream> #include <cstring> #include <cstdio> #i原创 2015-02-19 01:31:04 · 180 阅读 · 0 评论 -
HOJ 2690 Nail II
区间查询最大值。用线段树维护区间最大值。#include <cstdio> #include <algorithm> using namespace std; #define lson l , m , rt << 1 #define rson m + 1 , r , rt << 1 | 1 const int maxn = 222222; int MAX[maxn<<2]; void PushUP(原创 2015-02-19 15:30:36 · 196 阅读 · 0 评论 -
POJ 3264 Balanced Lineup
题目大意:牛排成一排,每只牛都有自己的高度,然后有q个询问,询问一个区间内的牛的最大身高和最小身高的差。 做法:线段树维护区间最大最小值。#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 con原创 2015-02-19 00:47:56 · 149 阅读 · 0 评论 -
HDU 1698 Just a Hook
区间修改,整个区间的和。也就是sum[1],用线段树维护区间和,区间修改lazy标记。#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int maxn = 111111; using原创 2015-02-19 15:41:58 · 206 阅读 · 0 评论 -
HOJ 2692 Nail IV
单点修改,区间查询最大值,用线段树维护区间最大值。#include <cstdio> #include <algorithm> using namespace std; #define lson l , m , rt << 1 #define rson m + 1 , r , rt << 1 | 1 const int maxn = 222222; int MAX[maxn<<2]; void Pu原创 2015-02-19 15:32:53 · 209 阅读 · 0 评论