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

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

生活随笔

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

编程问答

87-区间线段树(板子)--那个苑区的人最瘦

發(fā)布時(shí)間:2024/1/17 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 87-区间线段树(板子)--那个苑区的人最瘦 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1476.線段樹(shù)--那個(gè)苑區(qū)的人最瘦 (10分) C時(shí)間限制:500?毫秒?|? C內(nèi)存限制:655350?Kb 題目?jī)?nèi)容: 每年九月份開(kāi)學(xué)的時(shí)候, 學(xué)校為了迎接新生, 食堂的伙食自然會(huì)比平時(shí)稍微好一些, 然而各個(gè)苑區(qū)食堂的伙食改善程度不盡相同.比如,南苑食堂的飯菜看起來(lái)就高大上一些, 而欣苑食堂的飯菜,emmmm, 我們還是去小吃街吃吧! 寶寶還在長(zhǎng)身體呢,要吃好一點(diǎn).這就可能導(dǎo)致某個(gè)苑區(qū)的學(xué)生的平均體重有所差異, 甚至差異還比較明顯. 那么問(wèn)題來(lái)了, 假如我現(xiàn)在告訴你全校所有人的體重信息,然后每次操作或者是修改編號(hào)從 x 到 y的所有人的體重, 或者是詢問(wèn)編號(hào)從 x 到 y 的人的平均體重, 怎么破! 輸入描述 第一行兩個(gè)正整數(shù)N,Q, 表示人數(shù)和操作次數(shù) 接下來(lái)一行有N個(gè)正整數(shù), 第i個(gè)數(shù)表示編號(hào)為i的人的初始體重(1<=i<=N) 接下來(lái)有Q行, 每行或者是0 L R X 表示編號(hào)從L到R的所有人體重改變了X, 或者是1 L R 表示詢問(wèn)編號(hào)從L到R的人的平均體重 (x>0表示體重增加了,x<0表示體重減小了)對(duì)于100%的數(shù)據(jù),滿足N<=10^6,Q<=10^4, 1<=L<=R<=N, -15<= x <=15 輸出描述 對(duì)于每組詢問(wèn), 輸出一行一個(gè)浮點(diǎn)數(shù)(保留兩位小數(shù))表示編號(hào)從L到R(閉區(qū)間[L,R])的人的平均體重 輸入樣例 20 10 97 126 124 83 81 81 92 99 108 114 96 103 103 92 101 116 112 93 123 122 1 1 12 0 7 19 -9 0 6 19 1 0 5 17 9 1 0 6 0 6 15 -10 1 7 12 0 12 18 12 1 6 7 1 0 8 輸出樣例 100.33 87.29 93.00 82.00 86.00 /** 線段樹(shù)模板* 區(qū)間修改 區(qū)間查詢* 版本一:當(dāng)前區(qū)間值正確,tag未下傳*/ #include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include<cstring> using namespace std; typedef long long LL; const int MAXN=1e6+5; const LL INF=2e18; //const int INF=0x3f3f3f3f;//根據(jù)是否超long long修改 LL a[MAXN];//線段樹(shù)節(jié)點(diǎn)結(jié)構(gòu)體 struct Node{int left,right;//左右邊界LL mi,ma;//最小值 最大值LL sum;//和LL add;//增減標(biāo)記int set;//重置標(biāo)記 }tree[MAXN*4];//空間開(kāi)四倍//向上更新 void PushUp(int rt){int lson=rt<<1,rson=rt<<1|1; //rt << 1 | 1 等價(jià)與 rt * 2 + 1 tree[rt].mi=min(tree[lson].mi,tree[rson].mi);tree[rt].ma=max(tree[lson].ma,tree[rson].ma);tree[rt].sum=tree[lson].sum+tree[rson].sum; }//向下傳遞標(biāo)記 void PushDown(int rt){if(tree[rt].left<tree[rt].right){//如果不是葉子int lson=rt<<1,rson=rt<<1|1;if(tree[rt].set!=-1){//set初始為一個(gè)不會(huì)重置到的數(shù),這里是-1tree[lson].set=tree[rt].set;tree[rson].set=tree[rt].set;tree[lson].add=tree[rson].add=0;//add失效tree[lson].mi=tree[rson].mi=tree[rt].set;tree[lson].ma=tree[rson].ma=tree[rt].set;tree[lson].sum=(LL)tree[rt].set*(tree[lson].right-tree[lson].left+1);tree[rson].sum=(LL)tree[rt].set*(tree[rson].right-tree[rson].left+1);tree[rt].set=-1;}if(tree[rt].add){tree[lson].add+=tree[rt].add; tree[rson].add+=tree[rt].add;tree[lson].mi+=tree[rt].add; tree[rson].mi+=tree[rt].add;tree[lson].ma+=tree[rt].add; tree[rson].ma+=tree[rt].add;tree[lson].sum+=(LL)tree[rt].add*(tree[lson].right-tree[lson].left+1);tree[rson].sum+=(LL)tree[rt].add*(tree[rson].right-tree[rson].left+1);tree[rt].add=0;}} }//建立函數(shù) void Build(int rt,int L,int R){tree[rt].left=L;tree[rt].right=R;tree[rt].add=0;tree[rt].set=-1;if(L==R) {tree[rt].sum=tree[rt].mi=tree[rt].ma=a[L]; return;}int mid=(tree[rt].left+tree[rt].right)>>1;Build(rt<<1,L,mid);//只有Build時(shí)LR才會(huì)變Build(rt<<1|1,mid+1,R);PushUp(rt); }LL QuerySum(int rt,int L,int R){if(R<tree[rt].left||L>tree[rt].right) return 0;if(L<=tree[rt].left&&tree[rt].right<=R) return tree[rt].sum;PushDown(rt);int mid=(tree[rt].left+tree[rt].right)>>1;LL res=0;if(L<=mid) res+=QuerySum(rt<<1,L,R);if(R>mid) res+=QuerySum(rt<<1|1,L,R);PushUp(rt);return res; }LL QueryMin(int rt,int L,int R){if(L<=tree[rt].left&&tree[rt].right<=R) return tree[rt].mi;PushDown(rt);int mid=(tree[rt].left+tree[rt].right)>>1;LL res=INF;if(L<=mid) res=min(res,QueryMin(rt<<1,L,R));if(R>mid) res=min(res,QueryMin(rt<<1|1,L,R));PushUp(rt);return res; }LL QueryMax(int rt,int L,int R){if(L<=tree[rt].left&&tree[rt].right<=R) return tree[rt].ma;//完全包含才產(chǎn)生貢獻(xiàn)PushDown(rt);int mid=(tree[rt].left+tree[rt].right)>>1;LL res=-INF;if(L<=mid) res=max(res,QueryMax(rt<<1,L,R));if(R>mid) res=max(res,QueryMax(rt<<1|1,L,R));PushUp(rt);return res; }void UpdateAdd(int rt,int L,int R,int x){//把區(qū)間[L,R]加上x(chóng)if(L<=tree[rt].left&&tree[rt].right<=R){tree[rt].add+=x;tree[rt].sum+=(LL)x*(tree[rt].right-tree[rt].left+1);tree[rt].mi+=x;tree[rt].ma+=x;return;}PushDown(rt);int mid=(tree[rt].left+tree[rt].right)>>1;if(L<=mid) UpdateAdd(rt<<1,L,R,x);if(R>mid) UpdateAdd(rt<<1|1,L,R,x);PushUp(rt); }void Display(int rt){cout<<"-------------"<<endl;cout<<"id: "<<rt<<endl;cout<<"["<<tree[rt].left<<","<<tree[rt].right<<"]"<<endl;cout<<"mi: "<<tree[rt].mi<<endl;cout<<"ma: "<<tree[rt].ma<<endl;cout<<"sum: "<<tree[rt].sum<<endl;cout<<"add: "<<tree[rt].add<<endl;cout<<"set: "<<tree[rt].set<<endl; }void bfs(int rt){queue<int> q;while(!q.empty()) q.pop();q.push(rt);while(!q.empty()){int fst=q.front();q.pop();Display(fst);if(tree[fst].right>tree[fst].left){q.push(fst<<1);q.push(fst<<1|1);}} }void UpdateSet(int rt,int L,int R,int x){//把區(qū)間[x,y]置為xif(L<=tree[rt].left&&tree[rt].right<=R){tree[rt].set=x;tree[rt].sum=(LL)x*(tree[rt].right-tree[rt].left+1);tree[rt].mi=x;tree[rt].ma=x;tree[rt].add=0;return;}PushDown(rt);int mid=(tree[rt].left+tree[rt].right)>>1;if(L<=mid) UpdateSet(rt<<1,L,R,x);if(R>mid){UpdateSet(rt<<1|1,L,R,x);}PushUp(rt); }int main(){int n,m;//n個(gè)數(shù) m次詢問(wèn)while(scanf("%d%d",&n,&m)!=EOF){for(int i=1;i<=n;i++) scanf("%lld",&a[i]);Build(1,1,n);//建立線段樹(shù)int op,x,y,z;for(int i=1;i<=m;i++){scanf("%d%d%d",&op,&x,&y);if(op==1){//詢問(wèn)[x,y]的和,除以總數(shù)的平均 // printf("Case #%d:\n",i);printf("%.2lf\n",QuerySum(1,x,y) * 1.0 / (y - x + 1));}else if(op==2){//詢問(wèn)[x,y]的最大值printf("Case #%d:\n",i);printf("%lld\n",QueryMax(1,x,y));}else if(op==3){//詢問(wèn)[x,y]的最小值printf("Case #%d:\n",i);printf("%lld\n",QueryMin(1,x,y));}else if(op==0){//在[x,y]區(qū)間加上zscanf("%d",&z);UpdateAdd(1,x,y,z);}else{//把[x,y]置為zscanf("%d",&z);UpdateSet(1,x,y,z);}}}return 0; }

  

轉(zhuǎn)載于:https://www.cnblogs.com/zhumengdexiaobai/p/9540672.html

總結(jié)

以上是生活随笔為你收集整理的87-区间线段树(板子)--那个苑区的人最瘦的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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