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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

LuoguP2617 Dynamic Rankings (动态主席树学习理解)

發(fā)布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LuoguP2617 Dynamic Rankings (动态主席树学习理解) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目地址

題目鏈接

題解

動態(tài)主席樹的板子題。動態(tài)主席樹其實(shí)和靜態(tài)的有很大差別,雖然同樣是n個根,但是節(jié)點(diǎn)并不能共用,每個根節(jié)點(diǎn)表示bit上的一段區(qū)間。
所以其實(shí)是個樹套樹的東西來著,外層是bit,內(nèi)層是主席樹。
然后將所有數(shù)離散(包括讀入進(jìn)來的修改的數(shù),所以動態(tài)主席樹其實(shí)是離線的),那么就映射成了一段連續(xù)區(qū)間,用主席樹維護(hù)這段區(qū)間。
每次修改就把x->n(+=lowbit(x))的所有節(jié)點(diǎn)的數(shù)v的那條鏈加上v,注意動態(tài)開點(diǎn),不然空間爆炸。這樣子 空間就是 \(nlog^2n\)的(每次修改只會動到一條鏈,一共動log條,所以是\(log^2\)的)。可以看一下下面這個圖,很形象。

(圖片來源于Flash_Hu)
每次查詢將l-1和r兩個點(diǎn)的前綴和在bit上面對應(yīng)的節(jié)點(diǎn)找出來(log個),然后在主席樹上向下走,一次同時減l-1對應(yīng)的log個主席樹,同時加r對應(yīng)的log個主席樹
這樣子時間復(fù)雜度是\(O(nlog^2n)\)
大概就是這樣...然后查詢可以寫成類似二分的寫法,就可以非遞歸找了。但是修改還是寫成遞歸的靠譜一點(diǎn)(非遞歸要寫指針,指針容易寫掛..)。還有注意每次修改要修改的是離散化后的值,但是輸出要輸出離散前的。
再看個代碼意會一下應(yīng)該就沒問題了...

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 200100, M = 40000100;int a[N], b[N], len;
int l[N], r[N], op[N], d[N];
int n, m, root[N], rootl[30], rootr[30], tot;
struct tree {int lc, rc, sum;
}t[M];#define lowbit(i) (i&(-i))
void upd_tree(int &rt, int l, int r, int pos, int v) {if(!rt) rt = ++tot; t[rt].sum += v;if(l == r) return;int mid = (l + r) >> 1;if(pos <= mid) upd_tree(t[rt].lc, l, mid, pos, v);else upd_tree(t[rt].rc, mid + 1, r, pos, v);
}void upd(int pos, int k, int v) {for(int i = pos; i <= n; i += lowbit(i)) {upd_tree(root[i], 1, len, k, v);}
}
#define lc(i) (t[i].lc)
#define rc(i) (t[i].rc)
int query(int L, int R, int k) {int sum = 0, cur_l = 0, cur_r = 0;for(int i = L - 1; i; i -= lowbit(i)) rootl[++cur_l] = root[i];for(int i = R; i; i -= lowbit(i)) rootr[++cur_r] = root[i];int l = 1, r = len;while(l != r) {int mid = (l + r) >> 1; sum = 0;for(int i = 1; i <= cur_r; ++i) sum += t[lc(rootr[i])].sum;for(int i = 1; i <= cur_l; ++i) sum -= t[lc(rootl[i])].sum;if(k <= sum) {r = mid;for(int i = 1; i <= cur_l; ++i) rootl[i] = lc(rootl[i]);for(int i = 1; i <= cur_r; ++i) rootr[i] = lc(rootr[i]);}else {l = mid + 1, k -= sum;for(int i = 1; i <= cur_l; ++i) rootl[i] = rc(rootl[i]);for(int i = 1; i <= cur_r; ++i) rootr[i] = rc(rootr[i]);}}return b[l];
}
#undef lc
#undef rcint main() {scanf("%d%d", &n, &m);for(int i = 1; i <= n; ++i) scanf("%d", &a[i]), b[++len] = a[i];for(int i = 1; i <= m; ++i) {char ch[5];scanf("%s%d%d", ch, &l[i], &r[i]);op[i] = ch[0] == 'Q';if(op[i]) scanf("%d", &d[i]);else b[++len] = r[i];}sort(b+1,b+len+1); len = unique(b+1,b+len+1)-b-1;for(int i = 1; i <= n; ++i) a[i] = lower_bound(b+1,b+len+1,a[i])-b;for(int i = 1; i <= n; ++i) upd(i, a[i], 1);for(int i = 1; i <= m; ++i) {if(!op[i]) {upd(l[i], a[l[i]], -1);a[l[i]] = lower_bound(b+1,b+len+1,r[i])-b;upd(l[i], a[l[i]], 1);} else {printf("%d\n", query(l[i], r[i], d[i]));}}return 0;
}

轉(zhuǎn)載于:https://www.cnblogs.com/henry-1202/p/10684627.html

總結(jié)

以上是生活随笔為你收集整理的LuoguP2617 Dynamic Rankings (动态主席树学习理解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久亚洲精品国产 | 91色偷偷 | 日本欧美一区二区 | 日本三级生活片 | 日韩天天操 | 激情拍拍 | 午夜视频福利网站 | 国产精品-色哟哟 | 色姑娘av| 福利一区三区 | 久久久久无码国产精品不卡 | 黄瓜视频在线观看污 | 亚洲一级在线观看 | 天天干视频在线 | 色伊人网| 欧美综合第一页 | 亚洲激情网| 91在线色| 日韩欧美在线播放 | 久久天天躁狠狠躁夜夜躁2014 | 成人传媒 | 熟女一区二区三区视频 | 亚洲综合久久av一区二区三区 | 欧美黑人又粗又大高潮喷水 | 女女爱爱视频 | 国产一级不卡毛片 | 69堂视频 | 精品国产三级a∨在线 | 香蕉视频污视频 | 日韩精品五区 | 成人一二区 | www国产在线观看 | 狠狠爱综合网 | 女人和拘做爰正片视频 | 琪琪原网址 | 日本一本在线观看 | 天堂а√在线中文在线鲁大师 | 91黄版| 特级毛片www | 免费看操片 | 天堂8中文在线 | 影音先锋男人资源网站 | 黄色一级大片在线免费看国产一 | 高清18麻豆 | 欧美三级少妇高潮 | 狠狠涩 | 69av在线 | 久久久久亚洲AV成人网人人小说 | av资源网在线 | 国产精品久久免费视频 | 91一区在线观看 | 国产精品jizz在线观看无码 | 久久精品一区二区三区不卡牛牛 | av高清一区| 日本免费精品 | 亚洲一区 在线播放 | 日韩中文字幕视频在线 | 中文字幕一区二区三区在线观看 | 日本欧美在线播放 | 午夜免费福利小电影 | 国产高清无遮挡 | 日日摸天天爽天天爽视频 | sese国产 | 亚洲大尺度视频 | 久草免费资源站 | 欧美成人第一页 | www.jizzjizz.com | 欧美极品喷水 | 日韩久久精品视频 | 五月婷婷激情在线 | 99久久婷婷国产一区二区三区 | 精品免费一区 | 婷婷av一区二区三区 | 黑人操亚洲人 | 91精品国产一区二区无码 | 欧美激情一区二区三区在线 | 在线观看 中文字幕 | 中文字幕在线观看 | 日韩欧美一区二区三区视频 | 少妇2做爰交换朴银狐 | 午夜影视体验区 | 国产日韩av在线播放 | 中文一区二区 | 日韩黄色高清视频 | 婷婷tv| 国产九色| 黑人满足娇妻6699xx | 国产又粗又猛又爽视频 | 国产一区午夜 | 亚洲高清视频在线播放 | 国产老熟妇精品观看 | 天天操夜操 | 在线欧美a | 国产乱码精品一区二区三区五月婷 | 亚洲精品丝袜 | 亚洲色成人www永久网站 | 九九热精品在线观看 | 国产精品久久免费视频 | 中国黄色在线视频 |