摘要: 线段树的离线查询,把查询存起来按照h排个序,把砖的高度也存起来按照h排个序,然后按需把砖头update进线段树就好了。 一开始傻了吧唧的h每增加一次rebuild一次树,后来才意识到build一次是nlogn的,我囧,还傻傻的搞了一些常数优化。。 最后看着改了一下,写得比较挫。。不过速度还是比较快的 #include #include #include using namespace ... 阅读全文
posted @ 2013-12-10 22:53 acm_roll 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 最裸的线段树单点替换,区间查找最大值。#include #include using namespace std;#define M ((L+R)>>1)#define lson rtb)?a:b)const int maxn = 200001;int maxv[maxn M) update(rson); pushup(rt); }}int query(int rt,int L,int R) { if(ql = R) return maxv[rt]; int lv = -INT_MAX,rv = -INT_MAX; if(ql M) rv = quer... 阅读全文
posted @ 2013-12-10 20:05 acm_roll 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 刚学习线段树,先写一个最裸的单点更新。听大大们说线段树是一种非常经典而又灵活的数据结构。一步步学起吧。这里先写个静态的版本。 模板是模仿某位大大的。。#include #define lson rt> 1; build(lson); build(rson); pushup(rt); }}void update(int rt,int L,int R) { //更新点 if(L == R) sum[rt] += v; else { int M = (L + R) >> 1; if(tar M) update(rson);... 阅读全文
posted @ 2013-12-10 19:41 acm_roll 阅读(163) 评论(0) 推荐(0) 编辑