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

首頁 > 學院 > 開發設計 > 正文

poj2104 k-th number 主席樹入門講解

2019-11-14 11:52:38
字體:
來源:轉載
供稿:網友

定義:主席樹是一種可持久化的線段樹 又叫函數式線段樹

剛開始學是不是覺得很蒙逼啊 其實我也是 

主席樹說簡單了 就是保留你每一步操作完成之后的線段樹 然后有可加減性

呃 。。。 這么說好像還是有點生澀

那么就拿poj2104來舉例子吧 慢慢講我覺得會很好的

題意就是給你一個100000長度的數字 然后100000次詢問[L,R]之間第k大的數字是多少

這個很容易看出來 暴力根本不可以 黑你分分鐘的事情啊 

我們怎么辦呢 想想線段樹能不能做 想來想去 一顆線段樹好像不能這么做 GG

那么我們做一個美好的假設:

我們建立100000棵美麗的線段樹 每一個線段樹的節點 表示這一個區間內有多少個數字

第一棵線段樹保存著把第一個數字插入進去之后 每個區間有多少個數字

第二棵線段樹保存著把第一個 第二個數字插入進去之后 每個區間有多少個數字

。

。

。

第n棵線段樹保存著把第1,2,3。。。。n個數字插入進去之后 每個區間有多少個數字

好了 我們已經建立了這么多的線段樹 我們接下來該怎么辦呢?

對 就是查詢 

可是如何查詢呢? 假設我們要查詢[l,r]內的第k大

我們可以拿出第l-1 ,r 棵線段樹,然后兩者相減 我們想一下 這樣不就得到了相當于插入了第l到r個點所建立的一棵線段樹 這棵線段樹每個節點保留的信息是:這個區間內數字的個數 然后我們往下二分查找 就可以得到第k大了

現在的問題時 這么龐大的空間開銷我們耗費不起 我們該如何建立這樣的線段樹呢?

答案就是 我們要盡量利用重復節點 

我們可以想一下 我們每次建立線段樹 相對于前一棵線段樹 我們只修改了它的一條路徑 最多只有logn的變化 那么我們就存下這logn的變化 盡可能的利用重復節點 就可以達到重復使用的目的 有張圖你們自己體會一下 我也是盜圖 侵刪~

每次只修改一條路徑

這樣就能完成我們的主席樹了 

接下來是我自己寫的該題代碼 

#include <iostream>#include <algorithm>#include <stdio.h>#include <string.h>#include <stdlib.h>using namespace std;#define maxn (int)(1e6+10)struct node{    int cnt,l,r;}treenode[30*maxn];//定義一個結構體吧 要不心累 l 和 r 表示 左右兩個節點的序號 這個不是單純的單個線段樹了 這個還是有必要的 最好開20-40倍int tree_cnt[maxn];//每個線段樹跟節點的坐標 這個是搜索的起點啊int init[maxn];//int cop[maxn];int n,t_cnt=0,newn;//t_cnt是現在數組開到多大了 然后建立下一個的時候注意++t_cnt;int getid(int x) {return (int)(lower_bound(init,init+newn,x)-init);}//數據太大 需要離散化int insert(int num,int becopyed,int l,int r)//記住返回自己的坐標{    ++t_cnt;    treenode[t_cnt].cnt=treenode[becopyed].cnt+1;    int save=t_cnt;    int mid=(l+r)/2;    if(l==r)    {        return save;    }    else if(num<=mid)    {        treenode[save].l=insert(num,treenode[becopyed].l,l,mid);        treenode[save].r=treenode[becopyed].r;    }    else    {        treenode[save].r=insert(num,treenode[becopyed].r,mid+1,r);        treenode[save].l=treenode[becopyed].l;    }    return save;}int query(int x,int y,int k,int l,int r){    if(l==r) return l;    int p=(treenode[treenode[y].l].cnt-treenode[treenode[x].l].cnt);    int mid=(l+r)/2;    if(k<=p)    {        return query(treenode[x].l,treenode[y].l,k,l,mid);    }    else return query(treenode[x].r,treenode[y].r,k-p,mid+1,r);}//一邊做減法 一邊查詢void PRint(int x,int l,int r){    cout<<treenode[x].cnt<<' ';    if(l==r) {return;}    int mid=(l+r)>>1;    print(treenode[x].l,l,mid);    print(treenode[x].r,mid+1,r);}int main(){    int n,qnum;    cin>>n>>qnum;    for(int i=0;i<n;++i) {scanf("%d",init+i);cop[i]=init[i];}    sort(init,init+n);    newn=unique(init,init+n)-init;    for(int i=1;i<=n;++i)    {        int p=insert(getid(cop[i-1]),tree_cnt[i-1],0,n);        tree_cnt[i]=p;        //cout<<p<<endl;    }    for(int i=0;i<qnum;++i)    {        int x,y,k;        scanf("%d %d %d",&x,&y,&k);        //cin>>x>>y>>k;        int ans=query(tree_cnt[x-1],tree_cnt[y],k,0,n);        //cout<<ans<<endl;        printf("%d/n",init[ans]);        //cout<<init[ans]<<endl;    }    //cout<<endl;    //for(int i=0;i<=n;++i) print(tree_cnt[i],0,n),cout<<endl;    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色琪琪综合男人的天堂aⅴ视频| 欧美黑人一级爽快片淫片高清| 国产视频丨精品|在线观看| 亚洲天堂色网站| 国产亚洲欧洲黄色| 中文字幕日韩有码| 美女扒开尿口让男人操亚洲视频网站| 国产91色在线|| 亚洲成人激情视频| 国产精品一区二区女厕厕| 这里只有精品久久| 国产精品v日韩精品| 久久久女人电视剧免费播放下载| 最近日韩中文字幕中文| 精品欧美国产一区二区三区| 97视频在线播放| 欧美激情中文网| 97视频免费看| 日韩av片免费在线观看| 尤物tv国产一区| 日韩在线观看免费高清完整版| 成人免费xxxxx在线观看| 欧美成人精品一区二区三区| 国产精品视频自在线| 这里只有精品在线播放| 国产亚洲欧洲高清一区| 亚洲成人黄色网址| 亚洲福利视频网站| 国产一区香蕉久久| 98午夜经典影视| 亚洲精选一区二区| 国产va免费精品高清在线观看| 亚洲色图av在线| 亚洲欧美变态国产另类| 色妞在线综合亚洲欧美| 国产亚洲一区二区精品| 视频在线观看一区二区| www.亚洲一区| 国产精品久久久久久久久影视| 亚洲精品美女在线观看播放| 亚洲国产精品一区二区久| 亚洲精品福利资源站| 成人两性免费视频| 狠狠色香婷婷久久亚洲精品| 久久国产一区二区三区| 久久久久久av| 亚洲影院色在线观看免费| 理论片在线不卡免费观看| 国产福利精品视频| 久久久久久久久久婷婷| 久久香蕉频线观| 日韩av理论片| 亚洲电影在线看| 成人国产精品免费视频| 国模精品视频一区二区| 国产精品美乳一区二区免费| 国内久久久精品| 少妇高潮 亚洲精品| 欧美www视频在线观看| 精品性高朝久久久久久久| 欧美日韩亚洲国产一区| 国产精品对白刺激| 成人性生交xxxxx网站| 国产精品成熟老女人| 久久成人这里只有精品| 91手机视频在线观看| 国产精品欧美一区二区| 亚洲精品国产精品久久清纯直播| 亚洲天堂影视av| 91亚洲精品久久久久久久久久久久| 日韩在线观看免费全| 欧美日韩另类视频| 国产亚洲欧美视频| 中文字幕精品久久| 黄网动漫久久久| 亚洲一区av在线播放| 中文字幕成人在线| 日韩精品视频在线播放| 91成人在线视频| 国产精品日韩在线| 少妇高潮久久77777| 日本一欧美一欧美一亚洲视频| 亚洲香蕉伊综合在人在线视看| 欧美视频免费在线观看| 欧美巨大黑人极品精男| 国产视频久久久久| 精品久久香蕉国产线看观看gif| 亚洲精品久久久一区二区三区| 亚洲美女视频网| 久热精品视频在线观看| …久久精品99久久香蕉国产| 久久久精品美女| 国产999精品久久久| 55夜色66夜色国产精品视频| 国产精品中文字幕在线| 国产欧美日韩中文字幕在线| 亚洲精品永久免费| 精品国内亚洲在观看18黄| 国产色视频一区| 国产精品a久久久久久| 欧美一级在线亚洲天堂| 亚洲精品久久久一区二区三区| 久久国产精品亚洲| 久久精品免费播放| 最近2019中文字幕在线高清| 国产精品久久久久久av福利软件| 久久这里有精品| 国产91精品久久久| 国产精品久久久久久五月尺| 精品国产欧美一区二区五十路| 久久久久久噜噜噜久久久精品| 亚洲开心激情网| 成人精品在线观看| 成人黄色在线播放| 亚洲在线一区二区| 欧美日本精品在线| 爽爽爽爽爽爽爽成人免费观看| 国产精品一区av| 黑人欧美xxxx| 久久精品亚洲精品| 欧美精品一区二区三区国产精品| 国产精品高潮粉嫩av| 日韩免费观看视频| 日韩av片永久免费网站| 欧美激情一区二区三区成人| 不卡av在线播放| 精品久久久国产精品999| 久青草国产97香蕉在线视频| 国精产品一区一区三区有限在线| 一本色道久久88精品综合| 久久精品久久久久电影| 久久久影视精品| 亚洲成人精品久久| 欧美日韩在线观看视频| 狠狠色狠狠色综合日日小说| 国产精品男女猛烈高潮激情| 国产精品一区二区三区久久| 国产精品免费久久久久久| 欧美性极品xxxx做受| 国产精品福利在线| 欧美日韩亚洲天堂| 亚洲欧美综合区自拍另类| 国产精品视频永久免费播放| 性金发美女69hd大尺寸| 欧美午夜精品久久久久久人妖| 热门国产精品亚洲第一区在线| 欧美精品情趣视频| 91经典在线视频| 91精品国产综合久久男男| 国产在线日韩在线| 国产精品久久在线观看| 亚洲午夜女主播在线直播| 国产精品视频成人| 在线电影中文日韩| 国产主播精品在线| 欧美性感美女h网站在线观看免费| 欧美国产日韩免费| 国产精品久久999| 夜夜嗨av一区二区三区免费区| 欧美成人免费观看| 欧美一区视频在线| 欧美成人亚洲成人| 91豆花精品一区| 亚洲欧洲成视频免费观看|