线段树
编码思考
这个作者很懒,什么都没留下…
展开
-
[线段树] HDU 1166 - 敌兵布阵
线段树第一题~#include <stdio.h>#define lson rt << 1#define rson rt << 1 | 1int maxn[50005 << 2], N;void build(int l, int r, int rt){ if(l == r) { scanf("%d", &maxn[rt]); return ;原创 2015-03-04 21:23:08 · 502 阅读 · 0 评论 -
[线段树] HDU 1394 - Minimum Inversion Number
求题中n种序列的最小逆序数。 首先求出给定序列的逆序数,可以通过线段树来求。 逆序数的概念是:满足< ai, aj > (i < j 并且 ai > aj) 的组数。 利用线段树来查询[当前元素+1, n-1]。 然后使当前元素所在的所有区间的结点+1。 最后通过当前状态的序列递推其他状态的序列即可。#include <stdio.h>#include <strin原创 2015-03-08 23:06:37 · 541 阅读 · 0 评论 -
[线段树] HDU 1754 - I Hate It
#include <stdio.h>#include <algorithm>using namespace std;#define lson rt << 1#define rson rt << 1 | 1int maxn[200000 << 2];void build(int l, int r, int rt){ if(l == r) { scanf("原创 2015-03-06 23:44:34 · 512 阅读 · 0 评论 -
[线段树] POJ 2828 - Buy Tickets
题意: 输入一个整数n。接下来n行分别输入两个整数Posi , Vali.。分别代表要插入的位置 和 插入的值。 本题思路比较难想,倒着插入会避免移动操作,只需要用线段树查询空着的个数即可。#include <stdio.h>#include <iostream>using namespace std;#define lson rt << 1#define rson rt原创 2015-03-17 17:40:06 · 554 阅读 · 0 评论 -
[线段树] HDU 2795 - Billboard
输入三个整数,h, w, n。代表h x w 的公告板和接下来有n个公告。 接下来输入n个公告的宽度Ki。高度都为1。 公告的规则是尽量往最上面放置。 问这n个公告分别放置的位置是第几行。 如果不能放置,输出-1。 第一眼看h,w的范围比较大,10^9,但是n最大才200000。 当h > n的时候,超出的部分是一定不会有公告放置的。 所以就可以用线段树来做原创 2015-03-13 17:05:24 · 541 阅读 · 0 评论 -
POJ 2528 - Mayor's posters
本题每次的更新区间为[1,10000000],区间较大,但是由于更新操作最多为10000条。从中可知数据的区间结点最多有20000个。将结点离散化后,可以节省很多空间。 离散化:把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。 离散化之前: 离散化之后: #include <stdio.h>#include <string.h>#incl原创 2015-03-25 18:36:11 · 615 阅读 · 0 评论 -
POJ 3468 - A Simple Problem with Integers
线段树成段更新,更新和查询利用延迟操作,不需要更新到叶子结点。 当要更新或查询的路径上遇到了延迟标记,则需要将此标记更新到子结点即可。#include <stdio.h>#include <string.h>#define lson rt << 1#define rson rt << 1 | 1long long maxn[100002 << 2], lazy[100002 << 2原创 2015-03-23 09:03:15 · 464 阅读 · 0 评论 -
HDU 1698 - Just a Hook
线段树成段更新第一题。 主要就是lazy操作,只有这需要查询的时候才去更新,节省很多时间。#include <stdio.h>#include <iostream>using namespace std;#define lson rt << 1#define rson rt << 1 | 1int T, N, Q, maxn[100005 << 2];pair<int, int>原创 2015-03-22 20:48:33 · 438 阅读 · 0 评论 -
POJ 2886 - Who Gets the Most Candies?
由于模拟约瑟夫环比较费时,可以利用线段树的查询功能来优化。 如下图,把一个环拆开变成一条直线,就可以查询某段区间有多少个空位置了。 反素数经典博文:打开连接#include <stdio.h>#include <iostream>#include <algorithm>#include <string.h>#include <map>#define lson rt <原创 2015-03-20 16:49:23 · 639 阅读 · 0 评论