
线段树
文章平均质量分 72
wwwwwwxu
不敢说强记,只敢说博闻。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ 2828 Buy Tickets
题目大意: 把一群人插进一个队列,求所有操作结束后的队列。 解题思路: 这个题非常好,反着来想这个题,从最后一个人倒序插入,逆推出得到我们希望的答案。 线段树维护,当前位置(区间)内有多少个空位。 线段树重要的不在于线段树本身,而在于它维护的是什么。 #include #include #include #define maxn 200005 using nam原创 2015-08-08 22:38:44 · 356 阅读 · 0 评论 -
2015 ACM/ICPC Asia Regional Shanghai Online
1008 An easy problem 解题思路:一颗线段树单点更新后求乘积。 #include #include #include #include #include #include #include #include #include #define LL long long #define db double #define EPS 1e-15 #de原创 2015-09-27 20:04:15 · 766 阅读 · 0 评论 -
BZOJ 2957 楼房重建
题目大意: 中文题。 解题思路: 我们狗眼观察可得,可见关系之和右侧最大的斜率有关系。 继续狗眼观察可得,我们修改一个数只会对这个数后面的数造成影响。 那么就可以分为两种情况: 1、某个线段中的最大值小于等于修改的数,那么这个线段的贡献为0,无需处理。 2、否则我们将这个线段分成两个并单独考虑,如果左侧的最大值大于修改的数,那么是不影响右侧的贡献的,只需递归处理左侧;原创 2015-08-29 21:13:48 · 673 阅读 · 0 评论 -
CodeForces 413E Maze 2D
题目大意: 2*n的矩阵,X的位置不能走,·的位置可以走,问两个点的最短距离。 解题思路: 构造一颗线段树,线段树维护四个值,左上到右上,左上到右下,左下到右上,左下到右下。 然后搞。 #include #include #include #define N 200001 #define M 600001 #define inf 500000000 using names原创 2015-08-30 16:02:42 · 453 阅读 · 0 评论 -
BZOJ 2104 K-th Number
题目大意: 求区间内第k小的数。 解题思路: 据说是主席树裸题,也可以用归并树划分树来搞。 然而我这么弱怎么可能会呢…… 算了算复杂度和POJ的机器速度,YY了半天,写个模拟,卡时过了。 #include struct node{ int id,x; }a[100000]; int cmp(void const*p,void const*q){ return (*原创 2015-08-29 16:20:48 · 459 阅读 · 0 评论 -
POJ 3667 Hotel
题目大意: Hotel有N(1 ≤ N ≤ 50,000)间rooms,并且所有的rooms都是连续排列在同一边,groups需要check in 房间,要求房间的编号为连续的r..r+Di-1并且r是最小的;visitors同样可能check out,并且他们每次check out都是编号为Xi ..Xi +Di-1 (1 ≤ Xi ≤ N-Di+1)的房间,题目的输入有两种样式:原创 2015-08-13 01:05:42 · 315 阅读 · 0 评论 -
HDU 3577 Fast Arrangement
题目大意: 给定最大的覆盖次数k和q条线段 对于每条线段判断是否能覆盖在相应区间上使得该区间上最大的覆盖次数 解题思路: 用lazy标记更新线段树即可。 #include #include #include #define LL long long #define db double using namespace std; const原创 2015-08-12 01:38:42 · 508 阅读 · 1 评论 -
POJ 2991 Crane
题目大意: 有N根棍子首尾相连,每次更改两个棍子之间的夹角,求最后一个点坐标。 解题思路: 因为前面的角度变了后面的角度也会变,所以显然是个线段树。 但是因为涉及到一点几何知识,我这种智障还是想了蛮久的。 #include #include #include #define LL long long #define db double #define maxn 10010原创 2015-08-11 23:48:54 · 413 阅读 · 0 评论 -
POJ 3468 Simple Problem with Integers
还是简单的线段树区间更新 #include #include #include #define LL long long #define maxn 111111 using namespace std; LL sum[maxn<<2],lazy[maxn<<2]; int max(int x,int y){ if (x>y) return x; else return y; } int m原创 2015-08-11 23:45:56 · 288 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number
题目大意: 求Inversion后的最小逆序数。 解题思路: 用O(nlogn)复杂度求出最初逆序数后,就可以用O(1)的复杂度分别递推出其他解。 线段树维护,比当前叶子节点小的叶子节点个数。 写了一份暴力,一份线段树,线段树的效率大概是暴力的八倍以上。 #include #include #include #define maxn 222222 using n原创 2015-08-08 22:31:05 · 308 阅读 · 0 评论 -
2015-2016 下半学期 第二周 训练(2)
1、hdu3336 题意:相同前缀的次数和。 题解:利用了KMP中next数组的含义,从j直接跳到next[j]的原因是next[j]~j中不会再有和1~j中的相同前缀。 next[i]表示了模式串p[1~i-1]中最大的相同的前缀和后缀的长度。 PS:关于KMP的具体讲解 请看这篇文章,http://blog.youkuaiyun.com/v_july_v/article/details/原创 2016-03-24 21:17:53 · 350 阅读 · 0 评论