「luogu3567」[POI2014]KUR-Couriers

Posted Cupcake

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「luogu3567」[POI2014]KUR-Couriers相关的知识,希望对你有一定的参考价值。

主席树

空间要开够!!!

空间要开够!!!

空间要开够!!!

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=500010;
 4 int n,m,root[N];
 5 int tot,lc[N<<5],rc[N<<5],cnt[N<<5];
 6 void build(int& k,int l,int r,int v){
 7     tot++;
 8     cnt[tot]=cnt[k]+1,lc[tot]=lc[k],rc[tot]=rc[k];
 9     k=tot;
10     if(l==r) return;
11     int mid=(l+r)>>1;
12     if(v<=mid) build(lc[k],l,mid,v);
13     else build(rc[k],mid+1,r,v);
14     return;
15 }
16 int que(int now,int pre,int l,int r,int len){
17     if(l==r) return l;
18     int mid=(l+r)>>1;
19     if(2*(cnt[lc[now]]-cnt[lc[pre]])>len) return que(lc[now],lc[pre],l,mid,len);
20     else if(2*(cnt[rc[now]]-cnt[rc[pre]])>len) return que(rc[now],rc[pre],mid+1,r,len);
21     else return 0;
22 }
23 int main(){
24     int t1,t2;
25     scanf("%d%d",&n,&m);
26     for(int i=1;i<=n;i++){
27         scanf("%d",&t1);
28         root[i]=root[i-1];
29         build(root[i],1,n,t1);
30     }
31     for(int i=1;i<=m;i++){
32         scanf("%d%d",&t1,&t2);
33         printf("%d\n",que(root[t2],root[t1-1],1,n,t2-t1+1));
34     }
35     return 0;
36 }

 

以上是关于「luogu3567」[POI2014]KUR-Couriers的主要内容,如果未能解决你的问题,请参考以下文章

「luogu3567」[POI2014]KUR-Couriers

luogu P3567 [POI2014] Couriers

luogu P3567 [POI2014]KUR-Couriers |莫队+随机化

luogu P3567 [POI2014]KUR-Couriers |莫队+随机化

luogu P3567 [POI2014]KUR-Couriers

P3567 [POI2014]KUR-Couriers