您的位置:首页 > 其它

【BZOJ 2223】 [Coci 2009]PATULJCI 主席树

2017-01-14 10:52 387 查看
刷水有益健康

#include<cstdio>
#include<cstring>
#include<iostream>
#define maxn 6000020
using namespace std;
int m,n,rt[maxn],sum[maxn],tot,ls[maxn],rs[maxn],c;
void insert(int x,int& y,int l,int r,int id){
y=++tot;ls[y]=ls[x],rs[y]=rs[x];sum[y]=sum[x]+1;
if(l==r)return ;
int mid=l+r>>1;
if(id>mid)insert(rs[x],rs[y],mid+1,r,id);
else insert(ls[x],ls[y],l,mid,id);
}
int query(int x,int y,int l,int r,int k){
if(l==r)return l;
int mid=l+r>>1;
if(sum[ls[y]]-sum[ls[x]]>k)return query(ls[x],ls[y],l,mid,k);
else if(sum[rs[y]]-sum[rs[x]]>k)return query(rs[x],rs[y],mid+1,r,k);
else return -1;
}
int main(){
scanf("%d%d",&n,&c);
for(int x,i=1;i<=n;i++){
scanf("%d",&x);
insert(rt[i-1],rt[i],1,c,x);
}
scanf("%d",&m);int a,b;
while(m--){
scanf("%d%d",&a,&b);
int x=query(rt[a-1],rt[b],1,c,(b-a+1)/2);
if(x==-1)puts("no");
else printf("yes %d\n",x);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: