這篇文章主要講解了“THE函數(shù)式線(xiàn)段樹(shù)代碼怎么寫(xiě)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“THE函數(shù)式線(xiàn)段樹(shù)代碼怎么寫(xiě)”吧!
張家界ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!
THE函數(shù)式線(xiàn)段樹(shù)代碼:
#include <cstdio> #include <cstring> #include <algorithm> #define lson st[num].ls #define rson st[num].rs using namespace std; const int MAXN = 100100; struct node { int ls,rs,cnt; }; struct fSTree { node st[MAXN*20]; int rt[MAXN],cur,rc; inline void _pushUp(int num) { st[num].cnt=st[lson].cnt+st[rson].cnt; } inline int _build(int l,int r) { int num=cur++; if(l==r) { st[num].cnt=0; return num; } int m=(l+r)>>1; st[num].ls=_build(l,m); st[num].rs=_build(m+1,r); _pushUp(num); return num; } inline int _insert(int pos,int l,int r,int last) { int num=cur++; st[num]=st[last]; if(l==r) { st[num].cnt++; return num; } int m=(l+r)>>1; if(pos>m) st[num].rs=_insert(pos,m+1,r,st[num].rs); else st[num].ls=_insert(pos,l,m,st[num].ls); _pushUp(num); return num; } inline int _quire(int k,int v,int o,int l,int r) { if(l==r) return l; int res = st[st[o].ls].cnt - st[st[v].ls].cnt,m=(l+r)>>1; if(k<=res) return _quire(k,st[v].ls,st[o].ls,l,m); else return _quire(k-res,st[v].rs,st[o].rs,m+1,r); } inline void init(int n) { cur=rc=0; rt[rc++]=_build(1,n); } inline void insert(int n,int pos) { rt[rc]=_insert(pos,1,n,rt[rc-1]); rc++; } inline int quire(int n,int k,int l,int r) { return _quire(k,rt[l-1],rt[r],1,n); } }fst; int hl[MAXN],hs[MAXN]; int main() { //freopen("hdu2665.in","r",stdin); int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&hs[i]); hl[i]=hs[i]; } sort(hl+1,hl+n+1); int nn=unique(hl+1,hl+n+1)-hl-1; fst.init(nn); for(int i=1;i<=n;i++) fst.insert(nn,lower_bound(hl+1,hl+1+nn,hs[i])-hl); while(m--) { int s,t,k; scanf("%d%d%d",&s,&t,&k); int idx = fst.quire(nn,k,s,t); printf("%d\n",hl[idx]); } } return 0; }
------------------------------------------------
poj 2761
一樣的題目啊..結(jié)果背板都被擊沉一發(fā) - -
#include <cstdio> #include <cstring> #include <algorithm> #define lson st[num].ls #define rson st[num].rs using namespace std; const int MAXN = 100100; struct node { int ls,rs,cnt; }; struct { int rt[MAXN],cur,rc; node st[MAXN*20]; inline void _pushUp(int num) { st[num].cnt=st[lson].cnt+st[rson].cnt; } inline int _build(int l,int r) { int num=cur++,m=(l+r)>>1; if(l==r) { st[num].cnt=0; return num; } st[num].ls=_build(l,m); st[num].rs=_build(m+1,r); _pushUp(num); return num; } inline int _insert(int pos,int l,int r,int last) { int num=cur++,m=(l+r)>>1; st[num]=st[last]; if(l==r) { st[num].cnt++; return num; } if(pos>m) st[num].rs=_insert(pos,m+1,r,st[num].rs); else st[num].ls=_insert(pos,l,m,st[num].ls); _pushUp(num); return num; } inline int _quire(int k,int o,int v,int l,int r) { if(l==r) return l; int res=st[st[v].ls].cnt-st[st[o].ls].cnt,m=(l+r)>>1; if(k<=res) return _quire(k,st[o].ls,st[v].ls,l,m); else return _quire(k-res,st[o].rs,st[v].rs,m+1,r); } inline void init(int n) { cur=rc=0; rt[rc++]=_build(1,n); } inline void insert(int n,int pos) { rt[rc]=_insert(pos,1,n,rt[rc-1]); rc++; } inline int quire(int n,int k,int l,int r) { return _quire(k,rt[l-1],rt[r],1,n); } }fst; int hl[MAXN],hs[MAXN]; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) { scanf("%d",&hs[i]); hl[i]=hs[i]; } sort(hl+1,hl+n+1); int nn=unique(hl+1,hl+n+1)-hl-1; fst.init(nn); for(int i=1;i<=n;i++) fst.insert(nn,lower_bound(hl+1,hl+nn+1,hs[i])-hl); while(m--) { int s,t,k; scanf("%d%d%d",&s,&t,&k); printf("%d\n",hl[fst.quire(nn,k,s,t)]); } } return 0; }
感謝各位的閱讀,以上就是“THE函數(shù)式線(xiàn)段樹(shù)代碼怎么寫(xiě)”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)THE函數(shù)式線(xiàn)段樹(shù)代碼怎么寫(xiě)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
本文名稱(chēng):THE函數(shù)式線(xiàn)段樹(shù)代碼怎么寫(xiě)
URL鏈接:http://vcdvsql.cn/article12/pphhgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、企業(yè)建站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)站建設(shè)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)