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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【洛谷 3372】线段树 1

發(fā)布時(shí)間:2025/3/16 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【洛谷 3372】线段树 1 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

如題,已知一個(gè)數(shù)列,你需要進(jìn)行下面兩種操作:

1.將某區(qū)間每一個(gè)數(shù)加上x(chóng)

2.求出某區(qū)間每一個(gè)數(shù)的和

輸入格式

第一行包含兩個(gè)整數(shù)N、M,分別表示該數(shù)列數(shù)字的個(gè)數(shù)和操作的總個(gè)數(shù)。

第二行包含N個(gè)用空格分隔的整數(shù),其中第i個(gè)數(shù)字表示數(shù)列第i項(xiàng)的初始值。

接下來(lái)M行每行包含3或4個(gè)整數(shù),表示一個(gè)操作,具體如下:

操作1: 格式:1 x y k 含義:將區(qū)間[x,y]內(nèi)每個(gè)數(shù)加上k

操作2: 格式:2 x y 含義:輸出區(qū)間[x,y]內(nèi)每個(gè)數(shù)的和

輸出格式

輸出包含若干行整數(shù),即為所有操作2的結(jié)果。

輸入輸出樣例

輸入 #1復(fù)制 5 5 1 5 4 2 3 2 2 4 1 2 3 2 2 3 4 1 1 5 1 2 1 4 輸出 #1復(fù)制 11 8 20

說(shuō)明/提示

時(shí)空限制:1000ms,128M

數(shù)據(jù)規(guī)模:

對(duì)于30%的數(shù)據(jù):N<=8,M<=10

對(duì)于70%的數(shù)據(jù):N<=1000,M<=10000

對(duì)于100%的數(shù)據(jù):N<=100000,M<=100000

(數(shù)據(jù)已經(jīng)過(guò)加強(qiáng)^_^,保證在int64/long long數(shù)據(jù)范圍內(nèi))

樣例說(shuō)明:

題解:復(fù)習(xí)一下線段樹(shù)咳咳咳,幾乎模板,但是我居然忘記在int main()里面調(diào)用build

? ? ? ?我跟我旁邊的王同學(xué)找了好久。。。。氣死了嚶嚶嚶

// luogu-judger-enable-o2 #include<iostream> #include<algorithm> #include<queue> #include<cmath> #include<cstring> #include<cstdlib> #include<cstdio> using namespace std; const int N=100003; typedef long long ll; ll z,k,sum[N*4],add[N*4],a[N]; int n,akioi,x,y,biu;void pushup(int rt){sum[rt]=sum[rt*2]+sum[rt*2+1]; }void build(int l,int r,int rt){if(l==r){sum[rt]=a[l];return;}int m=(l+r)/2;build(l,m,rt*2);build(m+1,r,rt*2+1);pushup(rt); }void pushdown(int rt,int ln,int rn){if(add[rt]){add[rt*2]+=add[rt];add[rt*2+1]+=add[rt];sum[rt*2]+=add[rt]*ln;sum[rt*2+1]+=add[rt]*rn;add[rt]=0;} }ll query(int L,int R,int l,int r,int rt){if(L<=l && R>=r)return sum[rt];int m=(l+r)/2;pushdown(rt,m-l+1,r-m);ll ans=0;if(L<=m) ans+=query(L,R,l,m,rt*2);if(R> m) ans+=query(L,R,m+1,r,rt*2+1);return ans; }void update(int L,int R,ll k,int l,int r,int rt){if(L<=l && R>=r){sum[rt]+=k*(r-l+1);add[rt]+=k;return ; } int m=(l+r)/2;pushdown(rt,m-l+1,r-m);if(L<=m) update(L,R,k,l,m,rt*2);if(R>m) update(L,R,k,m+1,r,rt*2+1);pushup(rt); }int main(){scanf("%d %d",&n,&akioi);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);build(1,n,1);while(akioi--){//cout<<7666;scanf("%d",&biu);if(biu==2){scanf("%d %d",&x,&y);printf("%lld\n",query(x,y,1,n,1));}else{scanf("%d %d %lld",&x,&y,&z);update(x,y,z,1,n,1);}}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/wuhu-JJJ/p/11324509.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的【洛谷 3372】线段树 1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。