#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 500010
using namespace std;
struct node
{
int lson,rson,sum;
}seg[N*20];
int size;
int root[N];
void update(int p,int &q,int l,int r,int v)
{
seg[++size]=seg[p],q=size;
seg[q].sum++;
if(l==r)return ;
int mid=(l+r)>>1;
if(v<=mid)update(seg[p].lson,seg[q].lson,l,mid,v);
else update(seg[p].rson,seg[q].rson,mid+1,r,v);
}
int que(int L,int R,int l,int r,int k)
{
if(l==r)return l;
int mid=(l+r)>>1;
if(seg[seg[R].lson].sum-seg[seg[L].lson].sum>k)
{
return que(seg[L].lson,seg[R].lson,l,mid,k);
}
if(seg[seg[R].rson].sum-seg[seg[L].rson].sum>k)
{
return que(seg[L].rson,seg[R].rson,mid+1,r,k);
}
return 0;
}
int n,m;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
update(root[i-1],root[i],1,n,x);
}
for(int i=1;i<=m;i++)
{
int L,R;
scanf("%d%d",&L,&R);
printf("%d\n",que(root[L-1],root[R],1,n,(R-L+1)>>1));
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
BZOJ 3524 [Poi2014]Couriers 可持久化线段树
原文地址:http://blog.csdn.net/wzq_qwq/article/details/47171401