日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2018年6月2号(线段树(2))

發布時間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2018年6月2号(线段树(2)) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  昨天只是普通的線段樹(簡單的單點修改

  而今天將講是比較普通的簡單的區間修改(加法修改):

  我主要是復制代碼的蒟蒻我只能依靠模板為生,所以我想特地練下手:

1 #include<bits/stdc++.h>//萬能頭文件 2 using namespace std; 3 struct node{ 4 int l,r; 5 long long sum//總和,add//標記(延遲標記); 6 #denfine l(x) tree[x].l; 7 #denfine r(x) tree[x].r; 8 #denfine sum(x) tree[x].sum; 9 #denfine add(x) tree[x].add//宏定義 10 }tree[100001*4]; 11 int a[100001*4],n,m; 12 void build(int p,int l.int r)//建樹 13 { 14 l(p)=l;r(p)=r; 15 if(l==r) {sum(p)=a[l];return ;} 16 int mid=(l+r)/2; 17 build(p*2,l,mid); 18 build(p*2+1,mid+1,r); 19 sum(p)=sum(p*2)+sum(p*2+1); 20 } 21 void spread(int p) 22 { 23 if(add(p))//p節點進行標記; 24 { 25 sum(p*2)+=add(p)*(r(p*2)-l(p*2)+1);//更新左子節點信息 26 sum(p*2+1)+=add(p)*(r(p*2+1)-l(p*2+1)+1);//更新右子節點; 27 add(p*2)+=add(p);//給左子節點打延遲標記; 28 add(p*2+1)+=add(p);//給右子節點打延遲標記; 29 add(p)=0;//消除標記; 30 } 31 } 32 void change(int p,int l,int r) 33 { 34 if(l<=l(p)&&r>=r(p)) 35 { 36 sum(p)+=(long long)d*(r(p)-l(p)+1); 37 add(p)+=d; 38 return ; 39 } 40 spread(p);//下傳延遲標記; 41 int mid(l(p)+r(p))/2; 42 if(l<=mid) change(p*2,l,r,d); 43 if(r>mid) change(p*2+1,l,r,d); 44 sum(p)=sum(p*2)+sum(p*2+1); 45 } 46 long long ask(int p,int l,int r) 47 { 48 if(l<=l(p)&&r>=r(p)) 49 return sum(p); 50 spread(p); 51 int mid=(l(p)+r(p))/2; 52 long long val=0; 53 if(l<=mid) val+=ask(p*2,l,r); 54 if(r>=mid) val+=ask(p*2+1,l,r); 55 return val; 56 } 57 int main() 58 { 59 cin>>n>>m; 60 for(int i=1;i<=n;++i) 61 scanf("%d",a[i]); 62 build(1,1,n);//建樹路口; 63 while(m--) 64 { 65 char op[2]; 66 int l,r,d; 67 scanf("%s%d%d",op,&l,&r); 68 if(op[0]=='c') 69 { 70 scanf("%d".%d); 71 chang(1,1,r,d);//進行修改 72 } 73 else printf("%lld\n",ank(1,l,r)); 74 } 75 }

好不容易打完了,可能會有很多錯誤,見諒!

轉載于:https://www.cnblogs.com/zssmg/p/9127571.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的2018年6月2号(线段树(2))的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。