Wikioi 1081 线段树成段更新单点查询
2014-05-08 01:01
190 查看
线段树练习飘逸的写法,自从自己改成这种写法之后,线段树就没再练过,现在终于练得上了。
因为这里查询只是查询了叶子结点,所以pushUp函数就用不上了,不过我没去掉之前是3ms,去掉之后反而变成4ms了,搞不懂怎么原因,没用到,去掉之后应该更快才对啊,竟然变慢了,真搞不明白?
因为这里查询只是查询了叶子结点,所以pushUp函数就用不上了,不过我没去掉之前是3ms,去掉之后反而变成4ms了,搞不懂怎么原因,没用到,去掉之后应该更快才对啊,竟然变慢了,真搞不明白?
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <deque> #include <vector> #include <queue> #include <string> #include <cstring> #include <map> #include <stack> #include <set> #define PI acos(-1.0) #define mem(a,b) memset(a,b,sizeof(a)) #define sca(a) scanf("%d",&a) #define sc(a,b) scanf("%d%d",&a,&b) #define pri(a) printf("%d\n",a) #define lson i<<1,l,mid #define rson i<<1|1,mid+1,r #define MM 100004 #define MN 1008 #define INF 2000000000 #define eps 1e-8 using namespace std; typedef long long ll; typedef unsigned long long ULL; int sum[MM],val[MM]; //void pushUp(int i) //{ // sum[i]=sum[i<<1]+sum[i<<1|1]; //} void pushDown(int i) //处理lazy标记 { if(val[i]) { val[i<<1]+=val[i],val[i<<1|1]+=val[i]; sum[i<<1]+=val[i],sum[i<<1|1]+=val[i]; val[i]=0; } } void build(int i,int l,int r) { sum[i]=val[i]=0; if(l==r) return ; int mid=(l+r)>>1; build(lson),build(rson); } void update(int i,int l,int r,int L,int R,int v) { if(L<=l&&r<=R) { val[i]+=v; sum[i]+=v; return ; } int mid=(l+r)>>1; pushDown(i); if(L<=mid) update(lson,L,R,v); if(R>mid) update(rson,L,R,v); //pushUp(i); } int query(int i,int l,int r,int x) { if(l==x&&r==x) return sum[i]; int mid=(l+r)>>1; pushDown(i); if(x<=mid) return query(lson,x); else return query(rson,x); } int main() { int n,q,mm,i,a,b,s; sca(n); build(1,1,n); for(i=1;i<=n;i++) { sca(a); update(1,1,n,i,i,a); } sca(q); while(q--) { sca(mm); if(mm==1) { scanf("%d%d%d",&a,&b,&s); update(1,1,n,a,b,s); } else { sca(s); pri(query(1,1,n,s)); } } return 0; }
相关文章推荐
- Wikioi 1082线段树成段更新成段查询
- codevs 1081 线段树练习 2 区间更新 单点查询 无lazy
- POJ 2155 Matrix (二维线段树入门,成段更新,单点查询 / 二维树状数组,区间更新,单点查询)
- HDOJ 1556 Color the ball 线段树 : 成段更新 单点查询
- POJ 2155 Matrix 二维线段树 奇妙的成段更新 单点查询
- 【codevs 1081】线段树练习2(单点查询+区间修改)
- 【单点更新,区间查询,线段树】【HDU1166】【敌兵布阵】
- 线段树基础操作--单点or区间更新+查询
- HDU 1164-排兵布阵典型的线段树单点查询或者一位树状数组
- [模板]线段树的建树、查询、单点更新、区间更新
- !POJ 2352 左下角星星-线段树-(单点更新,区间查询)
- hdu 1754 I Hate It 线段树单点更新区间查询
- BZOJ-1036: [ZJOI2008]树的统计Count (树链剖分 线段树 单点修改 区间查询 入门题)
- HDU - 1556 Color the ball (线段树 区间更新单点查询)
- HDOJ 4417 Super Mario 线段树 单点更新 成段查询
- 单点更新 “区间和”最值查询 线段树解法 和 BIT解法 杭电hdu1166
- HDU 1166 (线段树--单点更新,区域查询)
- zoj 1610 线段树,成段更新,查询有哪些段及其数量
- spoj Can you answer these queries I(线段树 单点更新 区间查询)
- HDU-1556-Color the ball-线段树+区间更新+单点查询