HDU4251 The Famous ICPC Team Again (主席树)
来源:互联网 发布:nginx检查配置文件 编辑:程序博客网 时间:2024/06/05 15:33
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4251
题目大意:求区间[L,R]的中位数。
解题思路:主席树。把求中位数看作求第(R-L+1)小的数即可。
/* ***********************************************┆ ┏┓ ┏┓ ┆┆┏┛┻━━━┛┻┓ ┆┆┃ ┃ ┆┆┃ ━ ┃ ┆┆┃ ┳┛ ┗┳ ┃ ┆┆┃ ┃ ┆┆┃ ┻ ┃ ┆┆┗━┓ 马 ┏━┛ ┆┆ ┃ 勒 ┃ ┆ ┆ ┃ 戈 ┗━━━┓ ┆┆ ┃ 壁 ┣┓┆┆ ┃ 的草泥马 ┏┛┆┆ ┗┓┓┏━┳┓┏┛ ┆┆ ┃┫┫ ┃┫┫ ┆┆ ┗┻┛ ┗┻┛ ┆************************************************ *///#pragma comment(linker, "/STACK:102400000,102400000")#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <bitset>using namespace std;#define rep(i,a,b) for (int i=(a),_ed=(b);i<=_ed;i++)#define per(i,a,b) for (int i=(b),_ed=(a);i>=_ed;i--)#define pb push_back#define mp make_pairconst int inf_int = 2e9;const long long inf_ll = 2e18;#define inf_add 0x3f3f3f3f#define mod 1000000007#define LL long long#define ULL unsigned long long#define MS0(X) memset((X), 0, sizeof((X)))#define SelfType intSelfType Gcd(SelfType p,SelfType q){return q==0?p:Gcd(q,p%q);}SelfType Pow(SelfType p,SelfType q){SelfType ans=1;while(q){if(q&1)ans=ans*p;p=p*p;q>>=1;}return ans;}#define Sd(X) int (X); scanf("%d", &X)#define Sdd(X, Y) int X, Y; scanf("%d%d", &X, &Y)#define Sddd(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z)#define reunique(v) v.resize(std::unique(v.begin(), v.end()) - v.begin())#define all(a) a.begin(), a.end()#define mem(x,v) memset(x,v,sizeof(x))typedef pair<int, int> pii;typedef pair<long long, long long> pll;typedef vector<int> vi;typedef vector<long long> vll;inline int read(){int ra,fh;char rx;rx=getchar(),ra=0,fh=1;while((rx<'0'||rx>'9')&&rx!='-')rx=getchar();if(rx=='-')fh=-1,rx=getchar();while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra*fh;}const int N = 1e5 + 5;vi v;inline int getid(int x){ return lower_bound(all(v),x) - v.begin() + 1;}struct node{ int l,r,sum;}tree[N*20];int tot,cnt;int rt[N];void update(int l,int r,int &x,int y,int k){ x = ++tot; tree[x] = tree[y]; tree[x].sum++; if(l==r) return; int mid = (l+r) >> 1; if(k<=mid) update(l,mid,tree[x].l,tree[y].l,k); else update(mid+1,r,tree[x].r,tree[y].r,k);}int query(int l,int r,int x,int y,int k){ if(l==r) return l; int mid = (l+r) >> 1; int sum = tree[tree[y].l].sum - tree[tree[x].l].sum; if(k<=sum) return query(l,mid,tree[x].l,tree[y].l,k); else return query(mid+1,r,tree[x].r,tree[y].r,k-sum);}int a[N];int main(){//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);//ios::sync_with_stdio(0);//cin.tie(0);int cas = 1;int n;while(~scanf("%d",&n)) { tot = cnt = 0; MS0(rt); v.clear(); for(int i=1;i<=n;i++) { a[i] = read(); v.pb(a[i]); } sort(all(v)); v.erase(unique(all(v)),v.end()); cnt = v.size(); for(int i=1;i<=n;i++) { update(1,cnt,rt[i],rt[i-1],getid(a[i])); } int q = read(); printf("Case %d:\n",cas++); for(int i=1;i<=q;i++) { int x = read(), y = read(); int z = (y-x)/2 + 1; printf("%d\n",v[query(1,cnt,rt[x-1],rt[y],z)-1]); } }return 0;}
0 0
- HDU4251 The Famous ICPC Team Again (主席树)
- HDU4251-The Famous ICPC Team Again(划分树)
- HDU4251 The Famous ICPC Team Again(划分树裸)
- HDU 4251 The Famous ICPC Team Again 简单主席树
- hdu 4251 The Famous ICPC Team Again(划分树)
- HDU 4251 The Famous ICPC Team Again (划分树)
- hdu 4251 The Famous ICPC Team Again--划分树
- HDU:4251 The Famous ICPC Team Again(划分树)
- hdu 4251 The Famous ICPC Team Again(划分树)
- HDU 4251The Famous ICPC Team Again 划分树
- hdu 4251 The Famous ICPC Team Again(划分树)
- hdu 4251 The Famous ICPC Team Again (划分数)
- Hdu 4251 The Famous ICPC Team Again
- hdu 4251 The Famous ICPC Team Again
- HDU 4251 The Famous ICPC Team Again
- HDOJ 4251 The Famous ICPC Team Again
- HDOJ 题目4251The Famous ICPC Team Again(划分树)
- HDU_4251_The Famous ICPC Team Again(划分树)
- HTML5中<script>标签中的defer与async属性详解
- Lights
- Bag的实现
- Android几种数据存储方式的应用场景
- C++中一个由编译器决定结果的程序
- HDU4251 The Famous ICPC Team Again (主席树)
- [IOS 开发] iOS音频篇:使用AVPlayer播放网络音乐
- Linux内核分配内存的方式
- JAVA中对象的序列化
- 【URAL 1183】Brackets Sequence(区间DP+路径记录)
- N的阶乘
- iOS开发之CLPlacemark属性一览(定位编码与反编码相关)
- 初品符号常量
- codeforces723D Lakes in Berland 搜索