亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

【POJ 2104】K-th Number&主席樹詳解

2019-11-11 07:55:17
字體:
供稿:網(wǎng)友

POJ 2104

題意

給定1到n的排列,每次詢問某一區(qū)間內(nèi)的第k小值。

樣例輸入

7 3 1 5 2 6 3 7 4 2 5 3 4 4 1 1 7 3

樣例輸出

5 6 3


主席樹介紹

可持久化線段樹,函數(shù)式線段樹。 有點抽象,能夠理解但還不是很熟練,代碼不長,但是非常簡練,有很多技巧,目前當(dāng)做黑箱。

可持久化:每次操作盡量用新節(jié)點表示而不是修改原節(jié)點,這樣就能保留所有歷史信息。 函數(shù)式:函數(shù)式編程里變量常常是不變的,線段樹的函數(shù)式寫法就是這樣。

我們用區(qū)間k小值來解釋。

一些預(yù)處理

離散化(排序+去重),其實本道題不需要這個操作。 下面的代碼用到了STL的很多技巧,用unique()函數(shù)去重,用lower_bound()重新映射a數(shù)組。

for (i = 1;i <= n; i++) scanf("%d",&a[i]);for (i = 1;i <= n; i++) b[i] = a[i];sort(b+1,b+n+1);k = unique(b+1,b+n+1) - (b+1);for (i = 1;i <= n; i++) a[i] = lower_bound(b+1,b+k+1,a[i])-b;

假設(shè)求整個區(qū)間的k小值

這個問題可以用AVL樹做,但是這里介紹一種類似平衡樹的方法。假設(shè)某個節(jié)點的區(qū)間為[l,r],則這個節(jié)點記錄的是在a數(shù)組中有多少個a[i]滿足l<=a[i]<=r。這樣搜索第k小值時,如果左孩子數(shù)量小于k則k小值在左子樹中,反之則在右子樹中。復(fù)雜度log(n)。

對于任意區(qū)間[L,R]

建立n棵線段樹,每棵維護(hù)[1,i]的數(shù)字出現(xiàn)情況。 顯然這n棵線段樹每個節(jié)點代表的區(qū)間都是一樣的,所以這n棵線段樹同構(gòu)。 用第R棵線段樹去“減”第(L-1)棵線段樹,得出來的結(jié)果就是區(qū)間[L,R]的情況,對這棵樹套用一遍上面求整個區(qū)間的方法就可以求出[L,R]中的k小值。

如何節(jié)約空間

上面的方法看起來還是比較具體的,但是會MLE(n棵線段樹)。 下面的優(yōu)化就是主席樹的精髓:如何扔掉重復(fù)的節(jié)點。有點抽象,這段話看懂了就比較輕松了。

我們發(fā)現(xiàn),第i棵線段樹和第i+1棵線段樹的區(qū)別在于加入了a[i+1]這個數(shù),而a[i+1]在第i棵樹上從根出發(fā)向下走,走過的節(jié)點+1就變成了第i+1棵線段樹。(你可以自己畫一下看看有什么不同)

也就是說相鄰兩棵線段樹之間不同節(jié)點個數(shù)至多為log(n)個,換句話說剩下這么多的節(jié)點都是一樣的! 那么重復(fù)的節(jié)點就可以扔掉了。比如說一個節(jié)點的左孩子是重復(fù)的,那么我不需要多開一個節(jié)點,而是直接連到前一棵樹上。 看起來比較復(fù)雜,但是編程中有很多技巧,最后代碼比普通線段樹還短。 P.S. 怕以后忘記這里寫的會很詳細(xì)。

sol

預(yù)處理這里就不再寫了。

建樹

現(xiàn)在連建樹都要重新寫了TAT。 其實只要建一棵空樹即可,后面的樹都是連到這棵樹上。 但是后面再update和query的時候有一個問題:左孩子和右孩子并不能簡單的乘2和乘2加1,如何解決?

//root[i]表示第i棵樹的根的位置void build(int l,int r,int &rt){ rt = ++tot; sum[rt] = 0; if (l == r) return; int m = (l + r) >> 1; build(l,m,ls[rt]); build(m+1,r,rs[rt]);}...tot = 0;build(1,k,root[0]);

用最樸素的方法:一個一個累加! 這里有一個技巧就是用了&,也就是說等到搜到這個點的時候自然會把這個點的位置給傳回來。這個技巧剩下了不少代碼,在后面的update和query中可以自己體會。

更新

//ls表示左孩子位置 rs表示右孩子位置 last表示前一棵樹、當(dāng)前節(jié)點的位置void update(int l,int r,int &rt,int last,int p){ rt = ++tot; ls[rt] = ls[last]; rs[rt] = rs[last];//暫時兩個孩子都連到前一棵樹的對應(yīng)孩子上 sum[rt] = sum[last] + 1;//這一步可以解釋是哪log(n)個點的值發(fā)生了修改! if (l == r) return; int m = (l + r) >> 1; if (p <= m) update(l,m,ls[rt],ls[last],p); else update(m+1,r,rs[rt],rs[last],p);//修改的那個節(jié)點開辟出一個新節(jié)點 ls/rs會回傳新的節(jié)點的位置!前面講到過}...for (i = 1;i <= n; i++) update(1,k,root[i],root[i-1],a[i]);

這樣一來就把這“n棵線段樹”都建好了??梢钥闯鲭m然節(jié)點總數(shù)為nlog(n),但是卻把所有的情況都記錄下來了,這就是“可持久化”。

查詢

int query(int ss,int tt,int l,int r,int k){ if (l == r) return l; int m = (l + r) >> 1; int cnt = sum[ls[tt]] - sum[ls[ss]];//用第tt棵線段樹減去第ss棵線段樹 if (k <= cnt) return query(ls[ss],ls[tt],l,m,k); else return query(rs[ss],rs[tt],m+1,r,k-cnt);}...while (q--) { scanf("%d%d%d",&ql,&qr,&qk); int res = query(root[ql-1],root[qr],1,k,qk); 有了前面的鋪墊,查詢就比較簡單了。

完整代碼

#include<cmath>#include<cstdio>#include<vector>#include<cstring>#include<ioman
ip>#include<stdlib.h>#include<iostream>#include<algorithm>#define ll long long#define inf 1000000000#define mod 1000000007#define N 100000using namespace std;int a[N],b[N],root[N*20],ls[N*20],rs[N*20],sum[N*20];int n,q,i,tot,k,ql,qr,qk;void build(int l,int r,int &rt){ rt = ++tot; sum[rt] = 0; if (l == r) return; int m = (l + r) >> 1; build(l,m,ls[rt]); build(m+1,r,rs[rt]);}void update(int l,int r,int &rt,int last,int p){ rt = ++tot; ls[rt] = ls[last]; rs[rt] = rs[last]; sum[rt] = sum[last] + 1; if (l == r) return; int m = (l + r) >> 1; if (p <= m) update(l,m,ls[rt],ls[last],p); else update(m+1,r,rs[rt],rs[last],p);}int query(int ss,int tt,int l,int r,int k){ if (l == r) return l; int m = (l + r) >> 1; int cnt = sum[ls[tt]] - sum[ls[ss]]; if (k <= cnt) return query(ls[ss],ls[tt],l,m,k); else return query(rs[ss],rs[tt],m+1,r,k-cnt);}int main(){ cin>>n>>q; for (i = 1;i <= n; i++) scanf("%d",&a[i]); for (i = 1;i <= n; i++) b[i] = a[i]; sort(b+1,b+n+1); k = unique(b+1,b+n+1) - (b+1); for (i = 1;i <= n; i++) a[i] = lower_bound(b+1,b+k+1,a[i])-b; tot = 0; build(1,k,root[0]); for (i = 1;i <= n; i++) update(1,k,root[i],root[i-1],a[i]); while (q--) { scanf("%d%d%d",&ql,&qr,&qk); int res = query(root[ql-1],root[qr],1,k,qk); printf("%d/n",b[res]); } return 0;}
上一篇:flex4 spark 布局

下一篇:【POJ 3667】Hotel

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
色一情一乱一区二区三区| 国内精品免费| 亚洲国产美女搞黄色| 日本不卡高清视频一区| 路边理发店露脸熟妇泻火| 国产精品成人一区二区三区夜夜夜| 涩涩涩视频在线观看| 亚洲AV无码成人精品区东京热| 夜夜夜精品看看| 免费动漫网站在线观看| 欧美福利视频在线观看| 国产精品美女午夜爽爽| 91精品国产成人| 欧美日韩激情视频在线观看| 麻豆影视在线播放| 三级视频网站在线观看| 欧美成人一区二区视频| 精品欧美一区二区在线观看视频| 波多野结衣在线观看一区二区| av av在线| 97一区二区三区| 日韩黄色在线免费观看| 欧美巨大另类极品videosbest| 高跟丝袜一区二区三区| av资源网站在线观看| 天天摸天天做天天爽| 香蕉视频成人在线观看| 国产精品极品尤物在线观看| 国产精品1区2区3区| 日本成在线观看| 日本中文视频| 天天躁日日躁狠狠躁免费麻豆| 国产福利一区二区在线精品| 国产一区二区三区黄网站| 国产精一品亚洲二区在线视频| 一个人看的视频www在线观看免费| 亚洲另类激情图| 欧美性猛交xxxx乱大交退制版| 不卡高清视频专区| 国产成人在线视频免费观看| 91影院在线免费观看视频| 午夜久久免费观看| 日本一区二区三区高清不卡| 高清1区2区| 国产精品一二一区| 一区二区三区免费在线| 国产精品视频久久久久久久| 免费看污片的网站| 国内老熟妇对白xxxxhd| 国产乱码精品一区二区三区四区| 黑人一区二区| 国产va亚洲va在线va| jizz欧美大全| 亚洲第一区在线观看| 欧美亚洲网站| 免费男女羞羞的视频网站在线观看| 狠狠88综合久久久久综合网| 一级黄在线观看| 一本一道久久a久久综合蜜桃| 亚洲第一视频网| 亚洲最新免费视频| 日韩午夜影院| 狠狠干一区二区| 91超碰caoporn97人人| 成人免费在线网| 久久久久久久久久一区| 日韩视频一区在线观看| 久久一区视频| 成人性生交视频免费观看| 免费在线观看视频| 久草在线青青草| 国产精品美女视频网站| 亚洲日韩色图| 精品国内自产拍在线观看| 色呦呦视频在线| 国产精品乱码一区二区视频| 高清视频一区二区三区| 欧美哺乳videos| 在线观看亚洲精品福利片| 欧美jizz| 欧美在线播放高清精品| 国产mv久久久| 蜜桃精品久久久久久久免费影院| 国产精品你懂的在线欣赏| 特级西西444www大胆免费看| 亚洲成年人在线播放| 欧美亚洲国产激情| 91吃瓜网在线观看| 97影院手机在线观看| 能在线观看av网站| 日韩激情电影免费看| 欧美黑人xxxxx性受| 免费在线观看av网站| 久久大香伊蕉在人线观看热2| 亚洲丝袜另类动漫二区| 亚洲精品久久久久中文字幕二区| 国产精品青草综合久久久久99| 免费在线稳定资源站| 91chinesevideo永久地址| 欧美三区在线观看| 国产在线一区二区综合免费视频| 91在线网址| 国产免费一级片| 国产精品久久久久久亚洲色| av在线三区| 国产精品视频免费一区二区三区| 97偷自拍亚洲综合二区| 国产成人三级一区二区在线观看一| 亚洲国产裸拍裸体视频在线观看乱了| 国产毛片一区二区三区| 久久无码人妻一区二区三区| 国产无套精品一区二区三区| 日韩一级裸体免费视频| 最新在线你懂的| 国产另类ts人妖一区二区| 亚洲精品国产首次亮相| 精品午夜一区二区三区| 亚洲男人第一天堂| 麻豆明星ai换脸视频| 亚洲欧洲日本韩国| 99久久九九| 国产精品灌醉下药二区| 亚洲毛片一区| 成人中文字幕在线| 天天舔天天操天天干| 日韩电影在线观看一区二区| 亚洲成色777777女色窝| 亚洲AV成人无码一二三区在线| 中文字幕精品视频在线观看| 另类专区欧美制服同性| h网站久久久| 亚洲熟妇无码一区二区三区导航| 欧美精品videos另类| 欧美阿v一级看视频| 看全色黄大色黄女片18| 中国女人久久久| 日韩有码在线电影| 午夜一区二区三区免费| 国产福利不卡| 三级网在线观看| 亚洲国产精品久久人人爱潘金莲| 免费成人直播| 思思99精品视频在线观看| 国产精品99久久免费| 日韩av在线高清| 欧美一区二区三区成人| 国产一区二区精品调教| 色一区av在线| 咪咪色在线视频| 国产精品刘玥久久一区| 国产精品久久久久7777婷婷| 亚洲视频在线观看视频| 欧美亚韩一区| 中文在线免费二区三区| se01亚洲视频| 78精品国产综合久久香蕉| 精品国产一区二区三区免费| 免费国产精品视频| 色戒汤唯在线| 国产原创视频在线观看| 无人区在线高清完整免费版 一区二| 国产视频在线播放| 大荫蒂欧美视频另类xxxx| 夜夜躁狠狠躁日日躁av| 国产精品久久久久久久久久久久午夜片| 亚洲精品视频一区二区| 国产一级免费黄色片| 久草在线网址| 一区两区小视频| 午夜视频在线观| 欧美性理论片在线观看片免费| 精品久久影视| 杨幂一区二区三区免费看视频| www.久草.com| 91在线视频精品| 欧美日韩午夜剧场| 一级片一级片一级片| av不卡一区二区三区| 精品一区二区三孕妇视频| 国产免费亚洲高清| 久久免费激情视频| 成年人免费网站| 丝袜理论片在线观看| 国产中文字幕二区| 日韩在线观看免费全| 91精品国产91久久久久久最新毛片| 中文字幕乱在线伦视频乱在线伦视频| 国产精品毛片一区二区三区| 色婷婷狠狠五月综合天色拍| 欧美videos粗暴高清性| 婷婷亚洲五月色综合| 亚洲欧美视频在线观看| 台湾成人av| 国产精品视频资源| 一区二区不卡免费视频| 国产 欧美 日本| 国产精品视频免费一区二区三区| 日韩高清一级片| 亚洲桃色综合影院| 亚洲一区二区四区蜜桃| 高清国产一区二区三区四区五区| 日韩激情久久| av不卡免费在线观看| 牛牛在线精品视频| 成人免费播放器| 亚州av中文字幕在线免费观看| 免费看成人吃奶视频在线| 波多野结衣视频免费观看| 国产男男chinese网站| 欧美狂野另类xxxxoooo| 伊伊综合在线| 午夜精品久久久久久久99热黄桃| 911国产精品| 国产色片在线观看| a优女a优女片| 成人黄色免费| 欧美一区二区福利在线| 国产免费一区二区三区在线能观看| 欧美日韩国产在线看| 欧美视频第二页| 日韩国产精品一区二区三区| yourporn在线观看视频| 亚洲丝袜在线视频| 狠狠做六月爱婷婷综合aⅴ| 在线观看岛国av| 91cn在线观看| 欧美日韩电影在线播放| 小草av在线播放| 青青青草网站免费视频在线观看| 欧美做受777cos| 97涩涩爰在线观看亚洲| 国产一卡2卡3卡免费网站| 最新黄色av网站| www在线视频观看| 国产精品亚洲一区二区在线观看| 久青青在线观看视频国产| av手机天堂网| 女人18毛片水真多免费播放| 激情综合五月天| 国产精品suv一区二区69| www.97av| 中文字幕一区二区三区免费看| 国产日韩中文在线中文字幕| 亚洲资源在线网| 欧美在线播放高清精品| 亚洲 小说区 图片区 都市| 91午夜精品亚洲一区二区三区| 欧美啪啪免费视频| 国产亚洲精品91在线| 加勒比一区二区三区在线| 奇米777影视成人四色| 91麻豆桃色免费看| 久久久久久久久91| 久久99国产综合精品女同| shkd中文字幕久久在线观看| 国产日本欧美在线| 亚洲欧美怡红院| 国产不卡视频| 欧美日韩成人一区二区三区| 欧美极品少妇与黑人| 欧美free嫩15| 四虎一区二区三区| 特一级黄色大片| 日本电影免费看| 国产一区二区三区91| 中文字幕一区日韩电影| 99精品国产99久久久久久97| 在线麻豆国产传媒1国产免费| 欧美国产免费| 久草福利资源在线| 永久免费看mv网站入口亚洲| 日韩免费大片| 亚洲日本视频在线观看| 日本熟女一区二区| 九色91播放| 女人喷潮完整视频| 日韩精品乱码久久久久久| 久久久久久国产免费a片| 五月网丁香网| 操操操日日日| 久久精品中文字幕免费mv| 一区二区精品伦理...| 精品一区在线观看视频| 欧美一级专区| 日本fc2在线观看| 欧美激情99| 日本韩国精品在线| 五月色婷婷综合| www.四虎成人| 欧美久久免费观看| 波多野结衣久久久久| 韩国av免费在线观看| 亚洲精品一级二级| 在线观看免费观看在线| 亚洲国产中文字幕久久网| 91免费在线视频网站| 久草在线视频网站| 天堂а√在线8种子蜜桃视频| 女同激情久久av久久| 国产高清视频在线观看| 九九九热精品免费视频观看网站| 成人爽a毛片免费啪啪| 中文字幕亚洲第一| 亚洲欧美日韩网| 亚洲永久免费精品| 一区二区在线电影| 99视频免费在线观看| 久久综合九色综合88i| 中文字幕一区二区三区四区视频| 国产视频网址在线| 国产黄色大片网站| 欧美中文在线| 性直播在线观看| 精品国产免费视频| 日韩欧美电影一区| 天天想你在线观看完整版电影免费| 最近中文视频在线| 日本理论中文字幕| 亚洲综合在线视频| 中文字幕av久久| 国产精品第3页| 天天操天天操天天干| 四季av日韩精品一区| 亚洲图色在线| www.成人69.com| 中文字幕日韩欧美在线| 中文字幕无人区二| 免费的黄色av|