[模板] 线段树

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int amn=1e5+5;
 5 int num[amn];
 6 struct Segment_Tree{
 7     ll l,r,sum,lazy,len;
 8     #define ls rt<<1
 9     #define rs rt<<1|1
10     #define trl(rt) tr[rt].l
11     #define trr(rt) tr[rt].r
12     #define trsum(rt) tr[rt].sum
13     #define trlz(rt) tr[rt].lz
14     #define trlen(rt) tr[rt].len
15     #define Mid int mid=(l+r)>>1
16 }tr[amn];
17 void push_up(int rt){
18     trsum(rt)=trsum(ls)+trsum(rs);
19 }
20 void bulid(int rt,int l,int r){
21     trl(rt)=l,trr(rt)=r;
22     trlz(rt)=0;
23     trlen(rt)=r-l+1;
24     if(l==r){
25         trsum(rt)=num[l];
26     }
27     Mid;
28     build(ls,l,mid);
29     build(rs,mid+1,r);
30     push_up(rt);
31 }
32 void push_down(int rt,int l,int r){
33     if(trlz(rt)){
34         Mid;
35         trsum(ls)=trlz(rt)*(mid-l+1);
36         trsum(rs)=trlz(rt)*(r-mid);
37         trlz(ls)=trlz(rs)=trlz(rt);
38         trlz(rt)=0;
39     }
40     return ;
41 }
42 ll query(int rt,int l,int r,int L,int R){
43     if(L<=l&&r<=R)return trsum(rt);
44     Mid;
45     push_down(rt);
46     if(L<=mid)query(ls,l,mid,L,R);
47     if(mid+1<=R)query(rs,mid+1,L,R);
48 }
49 void updata(int rt,int l,int r,int L,int R,int val){
50     if(L<=l&&r<=R){
51         trlz(rt)=val;
52         trsum(rt)=trlz(rt)*trlen(rt);
53         return ;
54     }
55     Mid;
56     push_down(rt,l,r);
57     if(L<=mid)updata(ls,l,mid,L,R,val);
58     if(mid+1<=R)updata(rs,mid+1,r,L,R,val);
59     push_up(rt);
60 }
61 int main(){
62     
63 }

 

全部评论

相关推荐

就在我现在公司的隔壁每天经过都唏嘘不已(就是羡慕)什么时候可以到这里上班啊
柯基在debug:从大学毕业投简历到现在了,应届的时候我都面到终面了,现在工作四年了连简历初筛都过不了了
投递莉莉丝游戏等公司8个岗位
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
程序员牛肉:这一眼假啊,基本上都是骗人的,不然就涉及到职位贪腐了,就像之前华为的OD事件,看你运气好不好了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务