线段树
文章平均质量分 74
ThunderSei
这个作者很懒,什么都没留下…
展开
-
poj2828 线段树好题
题目意思是一群人排队买票,然后后面一个一个的来人插队,每个人都有一个特殊的编号,每次告诉你他插在第几个人的后面,问最后这串人的数字串最后是什么。 如果模拟来搞的话每次要一个一个的挪动人,最差的情况下每个人的位置都要变,是O(n^2)的,200000的数据显然是搞不动。 “正着思考麻烦的时候可以试着反向来思考” 假设前面n-1个人已经站好了,后面再来一个人,这个人原创 2013-10-30 00:56:12 · 586 阅读 · 0 评论 -
HDU 1698 线段树区间修改
一道线段树区间替换的模板题练习一下notonlysuccess的线段树模板注意注意!!! > 这两个运算符号的优先级非常低,只要写到就要加括号#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define MAX_N 500000int col[MAX_N];int sum[MAX_N];原创 2013-11-03 15:04:51 · 459 阅读 · 0 评论 -
POJ3468 顺便贴个学姐的线段树版
#include#include#include#includeusing namespace std;#define LL long long#define MAXN 101010LL sum[MAXN<<2],add[MAXN<<2],a[MAXN<<2];void pushup(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}原创 2013-11-01 23:36:20 · 460 阅读 · 0 评论 -
POJ 2104 归并树 OR 划分树
以前做的线段树都是存了一个值,而现在这颗树存的是一个数组。保存从[ l , r )这个左闭右开区间的有序值。建树的方法就是归并排序的过程,因此叫做归并树。如何查询某区间内的第K大值呢?用到的一个技巧是2分答案。我觉得2分是个很好用又很有技巧性的东西。首先是二分区间的选择,这里选择是右闭左开,因为当符合条件的优先更新右边。对于第K大的数,不大于第K大的数的数量一定要大于等于K,所原创 2013-11-05 14:47:50 · 621 阅读 · 0 评论 -
线段树和树状数组各过一次POJ2182
也是从后往前统计有几个空格#include#includeint dat[40000];int n;void PushUp(int rt){ dat[rt]=dat[rt*2]+dat[rt*2+1];}void build(int rt,int l,int r){ //printf("rt:%d l:%d r:%d\n",rt,l,r); if(r-l==1原创 2013-11-06 09:18:25 · 622 阅读 · 0 评论