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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

FZU 2171(线段树的延迟标记)

發(fā)布時間:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FZU 2171(线段树的延迟标记) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:容易理解。

分析:時隔很久,再一次寫了一道線段樹的代碼,之前線段樹的題也做了不少,包括各種延遲標記,但是在組隊分任務之后,我們隊的線段樹就交給了另外一個隊友在搞,

然后我就一直沒去碰線段樹的題了,但是我現(xiàn)在發(fā)現(xiàn)這種做法不是很好,導致我現(xiàn)在的思維受到了很大的局限性,所以我現(xiàn)在想糾正這種錯誤,該做的就應該去做,就像

高中一樣不能太偏科!一道比較簡單的線段樹延遲標記!

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath>struct node{int l , r;int sum;int color; }tree[100005*4];int n,len,a[100005];void buildTree(int l,int r,int n) {int mid = (l + r) >> 1;tree[n].l = l;tree[n].r = r;tree[n].color = 0;if(l == r){tree[n].sum = a[l];return ;}buildTree(l,mid,n*2);buildTree(mid+1,r,n*2+1);tree[n].sum = tree[n*2].sum + tree[n*2+1].sum; }void pushDown(int n) {tree[n*2].sum = tree[n*2].sum - (tree[n*2].r - tree[n*2].l + 1) * tree[n].color;tree[n*2+1].sum = tree[n*2+1].sum - (tree[n*2+1].r - tree[n*2+1].l + 1) * tree[n].color;tree[n*2].color += tree[n].color;tree[n*2+1].color += tree[n].color; }int calSum(int x,int y,int n) {int mid = (tree[n].l + tree[n].r) >> 1;if(tree[n].l==x && tree[n].r == y)return tree[n].sum;if(tree[n].color){pushDown(n);tree[n].color = 0;}if(y <= mid)return calSum(x , y , n*2);else if(x>mid)return calSum(x , y , n*2+1);elsereturn calSum(x , mid , n*2) + calSum(mid+1 , y , n*2+1); }void update(int x , int y , int n) {int mid = (tree[n].l + tree[n].r) >> 1;if(tree[n].l == x && tree[n].r == y){tree[n].sum = tree[n].sum - (tree[n].r - tree[n].l + 1);tree[n].color ++;return ;}if(y <= mid)update(x , y , n*2);else if(x > mid)update(x , y , n*2+1);else{update(x , mid , n*2);update(mid+1 , y , n*2+1);}tree[n].sum = tree[n*2].sum + tree[n*2 + 1].sum; }int main() {int i,q,x;while(scanf("%d%d%d",&n,&len,&q)!=EOF){for(i=1;i<=n;i++)scanf("%d",&a[i]);buildTree(1,n,1);while(q--){scanf("%d",&x);printf("%d\n",calSum(x , x+len-1 , 1));update(x , x+len-1 , 1);}}return 0; }

?

?

轉載于:https://www.cnblogs.com/jiangjing/p/3696080.html

總結

以上是生活随笔為你收集整理的FZU 2171(线段树的延迟标记)的全部內容,希望文章能夠幫你解決所遇到的問題。

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