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

    Description:

    给定一个n个数的数列,每次询问一个区间内有没有一个数出现次数超过一半

    Hint:

    (n,m<=5*10^5)

    Solution:

    主席树水题,详见代码

    #include<bits/stdc++.h>
    using namespace std;
    const int mxn=2e7+5;
    int n,m,cnt,len;
    int a[mxn],rt[mxn],ls[mxn],rs[mxn],sz[mxn];
    void ins(int pre,int& p,int l,int r,int val) 
    {
        p=++cnt; sz[p]=sz[pre]+1;
        if(l==r) return ; int mid=(l+r)>>1;
        if(val<=mid) ins(ls[pre],ls[p],l,mid,val),rs[p]=rs[pre];
        else ins(rs[pre],rs[p],mid+1,r,val),ls[p]=ls[pre];
    }
    
    int query(int pre,int p,int l,int r) 
    {
        if(l==r) return l; int mid=(l+r)>>1;
        if(sz[ls[p]]-sz[ls[pre]]>len) return query(ls[pre],ls[p],l,mid);
        if(sz[rs[p]]-sz[rs[pre]]>len) return query(rs[pre],rs[p],mid+1,r);
        return 0;
    }
    
    int main()
    {
        scanf("%d%d",&n,&m); int l,r;
        for(int i=1;i<=n;++i) scanf("%d",a+i),ins(rt[i-1],rt[i],1,n,a[i]);
        for(int i=1;i<=m;++i) {
            scanf("%d%d",&l,&r); len=(r-l+1)/2;
            printf("%d
    ",query(rt[l-1],rt[r],1,n));
        }
        return 0;
    }
    
  • 相关阅读:
    linux驱动启动顺序
    ubuntu下安装UltraEdit
    Linux下安装redis
    IntelliJ IDEA 设置Terminal 窗口字体大小
    centOS安装node
    linux下安装pm2
    nuxt部署在Linux下,ip+端口无法访问到
    var与let、const的区别
    JS函数和箭头函数
    回调函数
  • 原文地址:https://www.cnblogs.com/list1/p/10411764.html
Copyright © 2011-2022 走看看