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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

POJ 3468 A Simple Problem with Integers(线段树:区间更新)

發布時間:2023/12/1 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 3468 A Simple Problem with Integers(线段树:区间更新) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://poj.org/problem?id=3468

題意:

給出一串數,每次在一個區間內增加c,查詢[a,b]時輸出a、b之間的總和。

?

思路:

總結一下懶惰標記的用法吧。

比如要對一個區間范圍內的數都要加c,在找到這個區間之后,本來它的孩子結點也是需要更新的,但是我們可以暫時不更新,如果到時候需要用到這些孩子結點的時候,我們再來更新。這個時候就要用到懶惰標記了,也就是add[o]=c,之后它的孩子結點更新時就只需要加上add[o]就可以了。

1 #include<iostream> 2 #include<string> 3 #include<cstring> 4 #include<cstdio> 5 using namespace std; 6 7 const int maxn = 100000 + 10; 8 int n, m; 9 10 long long add[maxn << 2]; 11 long long sum[maxn << 2]; 12 13 void PushDown(int o, int m) 14 { 15 if (add[o]) 16 { 17 //傳遞懶惰標記 18 add[o << 1] += add[o]; 19 add[o << 1 | 1] += add[o]; 20 //更新子節點的值 21 sum[o << 1] += add[o] * (m - (m >> 1)); 22 sum[o << 1 | 1] += add[o] * (m >> 1); 23 //出去懶惰標記 24 add[o] = 0; 25 } 26 } 27 28 void PushUp(int o) 29 { 30 sum[o] = sum[o << 1] + sum[o << 1 | 1]; 31 } 32 33 void build(int L, int R, int o) 34 { 35 add[o] = 0; 36 if (L == R) 37 { 38 scanf("%lld", &sum[o]); 39 return; 40 } 41 int mid = (L + R) / 2; 42 build(L, mid, 2 * o); 43 build(mid + 1, R, 2 * o + 1); 44 PushUp(o); 45 } 46 47 void update(int L, int R, int x, int l,int r,int o) 48 { 49 if (L <= l && R >= r) //如果找到區間了,則不需要往下更新孩子結點了,等下次需要時再更新 50 { 51 add[o] += x; 52 sum[o] += (r - l + 1)*x; 53 return; 54 } 55 PushDown(o, r - l + 1); 56 int mid = (l + r) / 2; 57 if (L <= mid) 58 update(L, R, x, l, mid, 2 * o); 59 if (R > mid) 60 update(L, R, x, mid + 1, r, 2 * o + 1); 61 PushUp(o); 62 } 63 64 long long query(int L, int R, int l, int r, int o) 65 { 66 if (L <= l && R >= r) 67 return sum[o]; 68 PushDown(o, r - l + 1); 69 int mid = (l + r) / 2; 70 long long ans = 0; 71 if (L <= mid) 72 ans += query(L, R, l, mid, 2 * o); 73 if (R > mid) 74 ans += query(L, R, mid + 1, r, 2 * o + 1); 75 return ans; 76 } 77 78 79 int main() 80 { 81 //freopen("D:\\txt.txt", "r", stdin); 82 while (~scanf("%d%d", &n, &m)) 83 { 84 build(1, n, 1); 85 char c[5]; 86 int x, y, z; 87 while (m--) 88 { 89 scanf("%s", &c); 90 if (c[0] == 'Q') 91 { 92 scanf("%d%d", &x, &y); 93 printf("%lld\n", query(x, y, 1, n, 1)); 94 } 95 else 96 { 97 scanf("%d%d%d", &x, &y, &z); 98 update(x, y, z, 1, n, 1); 99 } 100 } 101 } 102 }

?

轉載于:https://www.cnblogs.com/zyb993963526/p/6561795.html

總結

以上是生活随笔為你收集整理的POJ 3468 A Simple Problem with Integers(线段树:区间更新)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久成年人 | 视频一区二区免费 | 亚洲国产视频在线观看 | 国产视频在线观看网站 | 波多野结衣电车 | 免费吃奶摸下激烈视频 | 久久一区二区视频 | videos亚洲| 我想看毛片 | 用力抵着尿进去了h | 天天做天天爱天天做 | 成人精品在线观看视频 | 97人人爽人人爽人人爽人人爽 | 国产精品制服丝袜 | 男女搞黄网站 | 欧美亚洲91 | 日韩综合网 | 亚洲性激情 | av加勒比在线 | av动漫免费看 | 一本色道久久亚洲综合精品蜜桃 | 精品美女久久久 | 天天天干 | 久久色av | 成人片黄网站色大片免费毛片 | 精品三区 | 欧美一区二区三区精品 | 亚洲区免费 | 99综合在线 | 久久综合亚洲色hezyo国产 | 欧美精品黑人 | cao在线 | 国产精品天天干 | 91视频二区| 亚洲欧美日韩综合一区二区 | 日本精品一二三区 | 亚洲欧美日韩图片 | 天天添天天射 | 九热精品 | 日本不卡在线 | 日韩成人激情 | 亚洲一二三不卡 | 日日摸日日添日日躁av | 岛国片在线免费观看 | 亚洲a级片 | 秋霞黄色网| 欧美日韩少妇精品 | 国产xxx在线| 精品产国自在拍 | 亚洲av成人精品午夜一区二区 | 香蕉久操 | 性欧美日本| 久久免费视频一区二区 | 成年人小视频在线观看 | 国产片网站 | 名人明星三级videos | 免费在线一区二区三区 | 一对一色视频聊天a | 一区二区三区免费观看视频 | 国产欧美一区二区三区精品酒店 | 成人在线黄色 | 视频久久| 亚洲国产一区二区在线观看 | 国产裸体永久免费无遮挡 | 国产精品美女久久久久 | 冲田杏梨一区二区三区 | 成人精品一区二区三区中文字幕 | 手机看片91 | 欧美人与动性xxxxx杂性 | 国产精品亚洲二区在线观看 | 黄色99| 极品尤物魔鬼身材啪啪仙踪林 | 女同一区 | 色屋视频 | 欧美7777| 夜夜添无码一区二区三区 | 中文字幕免费在线看线人 | 美女羞羞动态图 | 欧美性色黄 | 午夜伦伦 | 无码aⅴ精品一区二区三区 精品久久在线 | 夜夜草影院 | av导航网站 | 欧美激情国产精品 | 天天色影 | www.四虎在线观看 | 男女偷爱性视频刺激 | 日本精品人妻无码免费大全 | 小泽玛利亚在线 | 91嫩草欧美久久久九九九 | 成人美女在线观看 | 奇米影视久久久 | 成年人视频在线免费看 | 疯狂撞击丝袜人妻 | 欧美网站在线观看 | 亚洲免费在线观看视频 | 国产亚洲欧美精品久久久久久 | 日韩精品中文字幕在线观看 | 国产精品女人久久久 |