BZOJ2223(可持久化线段树)
2016-03-05 23:18
288 查看
思路:
很裸的可持久化。不说了。
很裸的可持久化。不说了。
/************************************************************** Problem: 2223 User: DtenSherlock Language: C++ Result: Accepted Time:1384 ms Memory:180708 kb ****************************************************************/ #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<cstring> #include<string> using namespace std; const int imax=100000+229; const int nmax=300000+229; int n,m,a[nmax],lishi[nmax],tot; int root[nmax],id; struct Node{ int lc,rc,count; }t[nmax*50]; void add(int now,int pos,int l,int r) { if(l+1==r) { t[now].count++; return;} int Mid=(l+r)>>1; if(pos<Mid) { t[++id]=t[t[now].lc]; add(t[now].lc=id,pos,l,Mid);} else { t[++id]=t[t[now].rc]; add(t[now].rc=id,pos,Mid,r); } t[now].count=t[t[now].lc].count+t[t[now].rc].count; } int query(int pre,int now,int val,int l,int r) { int Mid=(l+r)>>1; if(l+1==r) return l; int lcount=t[t[now].lc].count-t[t[pre].lc].count; int rcount=t[t[now].rc].count-t[t[pre].rc].count; if(lcount>val) return query(t[pre].lc,t[now].lc,val,l,Mid); else if(rcount>val) return query(t[pre].rc,t[now].rc,val,Mid,r); else return 0; } void iread() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); lishi[++tot]=a[i]; } sort(lishi+1,lishi+tot+1); tot=unique(lishi+1,lishi+tot+1)-(lishi+1); } void iwork() { root[0]=++id; for(int i=1;i<=n;i++) { root[i]=++id; t[root[i]]=t[root[i-1]]; int pos=lower_bound(lishi+1,lishi+tot+1,a[i])-lishi; add(root[i],pos,1,tot+1); } int Q,l,r; scanf("%d",&Q); for(int i=1;i<=Q;i++) { scanf("%d%d",&l,&r); int pos=query(root[l-1],root[r],(r-l+1)/2,1,tot+1); if(!pos) puts("no"); else printf("yes %d\n",lishi[pos]); } } int main() { // freopen("p3.in","r",stdin); iread(); iwork(); return 0; }
相关文章推荐
- 主席树(可持久化线段树)入门专题
- bzoj-3207 花神的嘲讽计划Ⅰ
- SPOJ 3267. D-query (主席树or树状数组离线)
- poj 2104 K-th Number
- 主席树学习小结
- BZOJ 3524: [Poi2014]Couriers
- POJ 2104 K-th Number
- HDU 2665 主席树(求区间第k大模板)
- 2016多校训练Contest7: 1012 Lights hdu5820
- Jzoj1020 逆序对统计 ≈ Bzoj3295 动态逆序对
- Jzoj5460【NOIP2017提高A组冲刺11.7】士兵训练
- 关于可持久化线段树的一些研究(链表实现)
- POJ 2104 K-th Number(可持久化线段树)
- HDU-2665 Kth number (可持久化线段树)
- [JZOJ 3794]. 【NOIP2014模拟8.20】高级打字机
- bzoj 3221: [Codechef FEB13] Obserbing the tree树上询问 (可持久化线段树+树链剖分)
- bzoj 3218: a + b Problem (可持久化线段树+最小割)
- Bzoj3551:[ONTAK2010]Peaks加强版:Kruskal+主席树
- 【线段树】【树】【网络流】[UOJ#77]A+B Problem
- 【BZOJ2588】Spoj 10628. Count on a tree【主席树】【LCA】