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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

P3834-【模板】可持久化线段树 1(主席树)

發(fā)布時(shí)間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P3834-【模板】可持久化线段树 1(主席树) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正題

評(píng)測(cè)記錄:https://www.luogu.org/recordnew/lists?uid=52918&pid=P3834


題意

給定一個(gè)長(zhǎng)度為n的序列,有m個(gè)詢問(wèn),求一個(gè)區(qū)間內(nèi)的第k小的樹(shù)。


解題思路

我們先思考用線段樹(shù)快速詢問(wèn)第k小的樹(shù)
我們可以用權(quán)值線段樹(shù)來(lái)處理第k小的樹(shù),先將數(shù)組離散化(排序加去重),然后下標(biāo)[l...r][l...r]表示在離散化序列內(nèi)lrl~r中的數(shù)出現(xiàn)過(guò)多少次,然后因?yàn)橐呀?jīng)離散化了所以我們可以直接根據(jù)兩個(gè)子節(jié)點(diǎn)返回的值來(lái)進(jìn)行向下尋找。
我們開(kāi)始考慮區(qū)間問(wèn)題。區(qū)間問(wèn)題就是只算上這個(gè)區(qū)間內(nèi)的數(shù)的線段樹(shù),我們可以使用前綴和。建立n個(gè)線段樹(shù)表示1x1~x這個(gè)區(qū)間,然后每次查詢就是用第rr棵線段樹(shù)減去·第l?1l?1棵線段樹(shù)就好了。
但是這么一算其實(shí)時(shí)間復(fù)雜度和空間復(fù)雜度還不如暴力那就直接暴力吧。這么一想我們會(huì)發(fā)現(xiàn)其實(shí)每次修改都只修改一條鏈,那么我們?yōu)槭裁床幻看沃辉黾右粭l鏈呢?
那么我們開(kāi)始今天的正題:可持久化線段樹(shù)(主席樹(shù))。
直接給出結(jié)構(gòu)

(上面的數(shù)是區(qū)間范圍,下面的是值。綠色為新增加的點(diǎn))
我們每次只修改一條鏈,然后沒(méi)有修改的那一部分和原來(lái)的節(jié)點(diǎn)相連,每次詢問(wèn)不同版本時(shí)只需要從不同版本的根節(jié)點(diǎn)開(kāi)始訪問(wèn)就可以了。而這樣我們就需要?jiǎng)討B(tài)開(kāi)點(diǎn)了。


代碼

#include<cstdio> #include<algorithm> #define MN 200010 using namespace std; struct tnode{int w,l,r,ls,rs; }t[MN<<5]; int n,m,x,y,k,a[MN],b[MN],root[MN],num,q,w; int build(int l,int r)//建立一棵空樹(shù) {int k=++num;t[k].l=l,t[k].r=r;if (l==r) return k;int mid=(l+r)>>1;t[k].ls=build(l,mid);t[k].rs=build(mid+1,r);//左右分區(qū)return k;//返回編號(hào) } int addt(int k,int z)//建立一條新鏈 {int nb=++num;t[nb]=t[k];t[nb].w++;//動(dòng)態(tài)開(kāi)點(diǎn)if (t[k].l==z&&t[k].r==z) return nb;//到達(dá)節(jié)點(diǎn)int mid=(t[k].l+t[k].r)>>1;if (z<=mid) t[nb].ls=addt(t[k].ls,z);else t[nb].rs=addt(t[k].rs,z);//建立下一個(gè)節(jié)點(diǎn)return nb; } int query(int k1,int k2,int k)//前綴和詢問(wèn)區(qū)間 {if (t[k1].l==t[k1].r) return t[k1].l;w=t[t[k2].ls].w-t[t[k1].ls].w;//計(jì)算左子樹(shù)在這個(gè)區(qū)間內(nèi)的數(shù)字?jǐn)?shù)量if (k<=w) return query(t[k1].ls,t[k2].ls,k);else return query(t[k1].rs,t[k2].rs,k-w);//向下詢問(wèn) } int main() {scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)scanf("%d",&a[i]),b[i]=a[i];sort(b+1,b+1+n);//排序(離散化1)int q=unique(b+1,b+1+n)-b-1;//去重(離散化)root[0]=build(1,q);//建立空樹(shù)for (int i=1;i<=n;i++){int te=lower_bound(b+1,b+1+q,a[i])-b;//二分尋找原來(lái)的位置root[i]=addt(root[i-1],te);//建立一條鏈}for (int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&k);printf("%d\n",b[query(root[x-1],root[y],k)]);//詢問(wèn)區(qū)間} }

總結(jié)

以上是生活随笔為你收集整理的P3834-【模板】可持久化线段树 1(主席树)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 成人国产免费视频 | 一级啪啪片 | 亚洲精选一区二区 | 日韩成人一区二区 | jjzz在线| 婷婷在线免费 | 国产av剧情一区 | 国产精品国产三级国产普通话蜜臀 | 国产青青草在线 | 一区二区三区四区免费视频 | 欧美激情视频一区 | 秋霞欧美一区二区三区视频免费 | 中文字幕亚洲图片 | 黄色小视频大全 | 二十四小时在线更新观看 | 原创真实夫妻啪啪av | 中文在线а√天堂 | 老司机深夜福利网站 | 亚洲av成人无码一区二区三区在线观看 | 黄色一级片. | 91精品又粗又猛又爽 | 亚洲图片88 | 尤物网站在线 | 国产日本精品 | 欧美理论视频 | www.欧美色 | 仙踪林av | 夜夜撸av | 久久久久久久国产视频 | 精品亚洲综合 | 激情四射婷婷 | 在线视频你懂得 | 日日夜夜狠 | 桃色91| 欧美 日本 国产 | 日韩精品极品视频 | 男女久久久 | 亚洲高清在线视频 | 啪啪网站视频 | 国产精品久久久久久亚洲影视 | 日本aa视频 | 日韩字幕在线 | 日韩欧美一级视频 | 最新视频–x99av | 国产人妻777人伦精品hd | 精品少妇人妻一区二区黑料社区 | 国产精品高潮呻吟久久 | 亚洲精品电影在线 | av片免费在线播放 | 久久一区视频 | 亚洲国产电影在线观看 | 成人国产综合 | 亚洲欧美日本在线 | japanese av在线| jizz日本女人 | 天天综合在线视频 | 91最新国产| 在线观看的黄色网址 | 91桃色免费视频 | 激情自拍偷拍 | 美日韩精品 | 欧美日韩在线视频一区 | 欧美性受xxxxxx黑人xyx性爽 | 亚洲免费福利 | 国产成人在线免费视频 | 免费黄色小说视频 | 国产第一福利影院 | 人妻丰满熟妇av无码区 | 男女扒开双腿猛进入爽爽免费 | 中文写幕一区二区三区免费观成熟 | 久久久免费观看视频 | 成人小视频免费看 | 午夜激情一区 | 91国内在线 | 美女视频一区二区 | 久久久久久穴 | 国产超碰人人模人人爽人人添 | 国产永久在线 | 午夜羞羞羞 | 成年人毛片视频 | 国产一级爱c视频 | 午夜偷拍福利视频 | 亚洲香蕉久久 | 日本黄色不卡视频 | 99久久99久久精品国产片果冻 | 日韩avxxx| 91av在| 久久亚洲精品无码va白人极品 | 真人毛片97级无遮挡精品 | 影音先锋制服丝袜 | 国产毛片在线 | 国产精品一区二区三区免费 | 波多野结衣视频一区二区 | 欧美成网| 91av官网| 国产精品一二三四五区 | 国产日本欧美在线 | 大尺度做爰啪啪床戏 | 日本黄色大片视频 |