這篇文章主要講解了“THE函數(shù)式線段樹代碼怎么寫”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“THE函數(shù)式線段樹代碼怎么寫”吧!
泊頭ssl適用于網站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!THE函數(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
一樣的題目啊..結果背板都被擊沉一發(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ù)式線段樹代碼怎么寫”的內容了,經過本文的學習后,相信大家對THE函數(shù)式線段樹代碼怎么寫這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián)網站建設公司,,小編將為大家推送更多相關知識點的文章,歡迎關注!
文章名稱:THE函數(shù)式線段樹代碼怎么寫-創(chuàng)新互聯(lián)
瀏覽地址:http://www.rwnh.cn/article32/cchppc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)網站制作、企業(yè)建站、云服務器、網站建設、App開發(fā)、服務器托管
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容