zoukankan      html  css  js  c++  java
  • [POI2014]Couriers

    link

    熟悉熟悉模板,其实就是主席树的板子,最后卡一卡空间即可

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    inline int read(){
        int f=1,ans=0;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    const int N=500001;
    int n,tmp[N],cnt,a[N],q,tr[N],ls[N*20],rs[N*20],sum[N*20];
    void build(int &rt,int l,int r){
        rt=++cnt;
        if(l==r) return;
        int mid=l+r>>1;
        build(ls[rt],l,mid),build(rs[rt],mid+1,r);
        return;
    }
    void update(int &rt,int lst,int l,int r,int x){
        rt=++cnt;ls[rt]=ls[lst],rs[rt]=rs[lst],sum[rt]=sum[lst]+1;
        if(l==r) return;
        int mid=l+r>>1;
        if(x<=mid) update(ls[rt],ls[lst],l,mid,x);
        else update(rs[rt],rs[lst],mid+1,r,x);
    }
    int ql,qr;
    int map[N],scc,pos[N],ST[N];
    int query(int L,int R,int l,int r){
        if(l==r){
            bool judge=(sum[R]-sum[L])*2>(qr-ql+1);
            if(!judge) return 0;
            return ST[l];
        }
        int mid=l+r>>1;
        int sl=sum[ls[R]]-sum[ls[L]],sr=sum[rs[R]]-sum[rs[L]];
        if(sl>sr) return query(ls[L],ls[R],l,mid);
        if(sl<sr) return query(rs[L],rs[R],mid+1,r);
        return 0;
    }
    int main(){
        n=read(),q=read();
        for(int i=1;i<=n;i++) a[i]=tmp[i]=read();
        sort(tmp+1,tmp+n+1);
        int d=unique(tmp+1,tmp+n+1)-(tmp+1);
        for(int i=1;i<=n;i++)
            if(!map[tmp[i]]) map[tmp[i]]=++scc,ST[scc]=tmp[i];
        for(int i=1;i<=n;i++) a[i]=map[tmp[lower_bound(tmp+1,tmp+n+1,a[i])-tmp]];
        build(tr[0],1,d);
        for(int i=1;i<=n;i++) update(tr[i],tr[i-1],1,d,a[i]);
        while(q--){
            ql=read(),qr=read();
            printf("%d
    ",query(tr[ql-1],tr[qr],1,d));
        }
    }
    View Code
  • 相关阅读:
    centos 7 开放端口
    删除mysql 表中重复的数据
    约瑟夫问题
    Technocup 2020 Elimination Round 3题解
    DISCO Presents Discovery Channel Code Contest 2020 Qual题解
    Comet OJ
    Berlekamp-Massey算法
    CH定理与线性递推
    2020集训队作业板刷记录(一)
    模拟费用流
  • 原文地址:https://www.cnblogs.com/si-rui-yang/p/10110666.html
Copyright © 2011-2022 走看看