码迷,mamicode.com
首页 > 其他好文 > 详细

模板:线段树

时间:2017-10-14 16:50:39      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:线段树   blog   模板   style   add   return   void   down   div   

 1 typedef long long LL;
 2 LL ans;
 3 
 4 struct Tree
 5 {
 6     LL l,r;
 7     LL sum,add;
 8 };
 9 Tree tree[4*N];
10 
11 void pushup(LL x)
12 {
13     LL tmp=x<<1;
14     tree[x].sum=tree[tmp].sum+tree[tmp+1].sum;
15 }
16 
17 void pushdown(LL x) 
18 {
19     LL tmp=x<<1;
20     tree[tmp].add+=tree[x].add;
21     tree[tmp+1].add+=tree[x].add;
22     tree[tmp].sum+=tree[x].add*(tree[tmp].r-tree[tmp].l+1);
23     tree[tmp+1].sum+=tree[x].add*(tree[tmp+1].r-tree[tmp+1].l+1);
24     tree[x].add=0;
25 }
26 
27 void build(LL l,LL r,LL x)
28 {
29     tree[x].l=l;
30     tree[x].r=r;
31     tree[x].add=0;
32     if(l==r)
33     {
34         scanf("%lld",&tree[x].sum);
35         return ;
36     }    
37     LL tmp=x<<1;
38     LL mid=(l+r)>>1;
39     build(l,mid,tmp);
40     build(mid+1,r,tmp+1);
41     pushup(x);
42 }
43 
44 void update(LL l,LL r,LL c,LL x)
45 {
46     if(r<tree[x].l||l>tree[x].r) return ;
47     if(l<=tree[x].l&&r>=tree[x].r)
48     {
49         tree[x].add+=c;
50         tree[x].sum+=c*(tree[x].r-tree[x].l+1);
51         return ;    
52     }
53     if(tree[x].add) pushdown(x);
54     LL tmp=x<<1;
55     LL mid=(tree[x].l+tree[x].r)>>1;
56     if(r<=mid) update(l,r,c,tmp);
57     else if(l>mid) update(l,r,c,tmp+1);
58     else
59     {
60         update(l,mid,c,tmp);
61         update(mid+1,r,c,tmp+1);    
62     }
63     pushup(x);
64 }
65 
66 void query(LL l,LL r,LL x)
67 {
68     if(r<tree[x].l||l>tree[x].r) return ;
69     if(l<=tree[x].l&&r>=tree[x].r)
70     {
71         ans+=tree[x].sum;
72         return ;
73     }
74     if(tree[x].add) pushdown(x);    
75     LL tmp=x<<1;
76     LL mid=(tree[x].l+tree[x].r)>>1;
77     if(r<=mid) query(l,r,tmp);
78     else if(l>mid) query(l,r,tmp+1);
79     else
80     {
81         query(l,mid,tmp);
82         query(mid+1,r,tmp+1);    
83     }
84 }

 

模板:线段树

标签:线段树   blog   模板   style   add   return   void   down   div   

原文地址:http://www.cnblogs.com/Leonard-/p/7667427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!