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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

这是我第一题AC的线段树

發(fā)布時間:2023/12/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 这是我第一题AC的线段树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目簡述: 有N個整數(shù),Q次操作,每次操作為詢問一個區(qū)間[a, b]內(nèi)數(shù)的和(0號操作)或者把一個區(qū)間內(nèi)的數(shù)全部加上v(1號操作)

線段樹求解即可。

#include <cstdio> #include <algorithm> using std::min; using std::max; #define L(no) ((no) << 1) #define R(no) (L(no) | 1) #define PLUSTAG(no, val) plustag[no] += val, query[no] += val*(rb[no]-lb[no]+1) const int MAXN = 400001; int lb[MAXN], rb[MAXN], query[MAXN], ans, plustag[MAXN]; int sum(int a, int b) {return a + b;} void build(int no, int l, int r) {int mid = l + r >> 1;lb[no] = l;rb[no] = r;if(l == r) scanf("%d", &query[no]);else {build(L(no), l, mid);build(R(no), mid + 1, r);query[no] = query[L(no)] + query[R(no)];} } void getval(int no, int l, int r, int(*func)(int, int), int* key) {int mid = lb[no] + rb[no] >> 1;if(l <= r && (lb[no] <= r&& rb[no] >= r || rb[no] >= l && lb[no] <= l)) {if(lb[no] == l && rb[no] == r) ans = func(ans, key[no]);else {if(plustag[no]) {PLUSTAG(L(no), plustag[no]);PLUSTAG(R(no), plustag[no]);plustag[no] = 0;}getval(L(no), l, min(mid, r), func, key);getval(R(no), max(l, mid + 1), r, func, key);}} } void plus(int no, int l, int r, int val) {int mid = lb[no] + rb[no] >> 1;if(l <= r && (lb[no] <= r&& rb[no] >= r || rb[no] >= l && lb[no] <= l)) {if(lb[no] == l && rb[no] == r) {PLUSTAG(no, val);}else {if(plustag[no]) {PLUSTAG(L(no), plustag[no]);PLUSTAG(R(no), plustag[no]);plustag[no] = 0;}query[no] += (r - l + 1) * val;plus(L(no), max(l, lb[no]), min(mid, r), val);plus(R(no), max(l, mid + 1), min(r, rb[no]), val);}} } int main() {int n, q, i, op, a, b, v;scanf("%d%d", &n, &q);build(1, 1, n);for(i = 1; i <= q; i++) {scanf("%d%d%d", &op, &a, &b);if(op == 0) {ans = 0;getval(1, a, b, sum, query);printf("%d\n", ans);}else {scanf("%d", &v);if(v != 0) plus(1, a, b, v);}}return 0; }

解釋一下:query[]表示一個區(qū)間里面的和……然后左右半?yún)^(qū)間分別搞……1操作時Lazy優(yōu)化是必須要加的(就是好像老師布置的作業(yè)等要交了再補(bǔ)……),然后,便過之。

問我為什么getval寫函數(shù)指針?因?yàn)檫@是百搭函數(shù)……要求最大值傳入max最小值傳min求和傳sum……

然后:就沒有然后了。過之。

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

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的这是我第一题AC的线段树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产a视频免费观看 | 色七七桃花综合影院 | 乳色吐息在线看 | 6080亚洲精品一区二区 | 中文婷婷| 日韩高清不卡一区 | 九九欧美 | 日韩av高清| 国产清纯白嫩初高中在线观看性色 | 久久精品国产99久久不卡 | 国产精品久久久久久亚洲影视 | 成人欧美视频在线观看 | 国产在线视频导航 | 日韩精品中文字幕一区二区三区 | 电影《走路上学》免费 | 老司机午夜福利视频 | 超碰人人干人人 | 精品人妻一区二区三区日产乱码卜 | 国产a免费 | 国产精品成人免费精品自在线观看 | 中文字幕三级视频 | 床上激情网站 | 亚洲综合av一区二区三区 | 免费观看的av网站 | 91成人精品国产刺激国语对白 | www.999av| 国内久久 | 波多野结衣av中文字幕 | 丰满大乳露双乳呻吟 | 国产伦精品一区二区三区高清 | 欧美性高潮 | 久久午夜精品视频 | 超碰在线免费播放 | 欧美日韩四区 | 日韩特黄毛片 | 一区二区三区在线播放 | 久久久久无码精品 | 男生和女生一起搞鸡 | 欧美一区二区三区爽爽爽 | 欧美国产综合 | 国产精品免费视频一区 | 欧美xxxxx高潮喷水麻豆 | 中国毛片网| 挪威xxxx性hd极品 | 中国一级黄色 | 亚洲三级在线观看 | 美女破处视频 | 中文字幕在线乱 | 无码人妻精品一区二区三区不卡 | 玉足调教丨vk24分钟 | 五号特工组之偷天换月 | 91香蕉国产在线观看 | 日韩欧美亚洲天堂 | 免费麻豆视频 | 999xxxx| 99久久久无码国产精品免费蜜柚 | 亚洲天堂精品在线 | 99久久久无码国产精品性 | 91久色蝌蚪| 亚洲AV无码成人精品区明星换面 | 不卡精品视频 | 国产xxxx18| 美女黄视频网站 | av大帝 | 日韩一二三四 | 日本成片网 | 成人h视频在线 | 日韩在线免费播放 | 黄色网页在线观看 | 一本久道视频一本久道 | 香蕉在线影院 | 告诉我真相俄剧在线观看 | 中国少妇做爰全过程毛片 | 91av视频播放| 日本高清一区二区视频 | 色小姐av | 涩涩精品| 少妇精品偷拍高潮白浆 | 亚洲91网 | 成人毛片在线 | 亚洲最大的成人网站 | 草草影院在线播放 | 无码精品人妻一区二区三区影院 | 久久久香蕉 | 国产白嫩美女无套久久 | 综综综综合网 | 成人在线观看一区二区 | 黄色综合网 | 网站在线免费观看 | 亚洲情网 | 四虎成人在线 | 日日夜夜网 | 91在线影院| 床戏高潮做进去大尺度视频网站 | 在线观看视频二区 | 久草福利在线视频 | 好吊妞无缓冲视频观看 | 99自拍偷拍| 极品新婚夜少妇真紧 |