zoukankan      html  css  js  c++  java
  • codevs 2021 中庸之道

    2021 中庸之道

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 钻石 Diamond
     
     
    题目描述 Description

    给定一个长度为N的序列,有Q次询问,每次询问区间[L,R]的中位数。

    数据保证序列中任意两个数不相同,且询问的所有区间长度为奇数。

    输入描述 Input Description

    第一行为N,Q。

    第二行N个数表示序列。

    接下来Q行,每行为L,R,表示一次询问。

    输出描述 Output Description

    输出Q行,对应每次询问的中位数。

    样例输入 Sample Input

    5 3

    1 4 8 16 2

    1 5

    3 5

    3 3

    样例输出 Sample Output

    4

    8

    8

    数据范围及提示 Data Size & Hint

    40%的数据,N,Q≤100;

    70%的数据,N≤100;

    100%的数据,N≤1000,Q≤100000,序列中的元素为1到10^9之间的整数。

    求区间第(len+1)/2大,主席树裸题

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define maxn 1010
    using namespace std;
    int root[maxn],lc[maxn*30],rc[maxn*30],sum[maxn*30],sz,n,m;
    int a[maxn],hash[maxn],cnt,val[maxn],w[maxn];
    void insert(int pre,int &now,int l,int r,int val){
        now=++sz;
        sum[now]=sum[pre]+1;
        if(l==r)return;
        int mid=(l+r)>>1;
        lc[now]=lc[pre];rc[now]=rc[pre];
        if(val<=mid)insert(lc[pre],lc[now],l,mid,val);
        else insert(rc[pre],rc[now],mid+1,r,val);
    }
    int query(int x,int y,int l,int r,int k){
        if(l==r)return l;
        int tmp=sum[lc[y]]-sum[lc[x]];
        int mid=(l+r)>>1;
        if(tmp>=k)return query(lc[x],lc[y],l,mid,k);
        else return query(rc[x],rc[y],mid+1,r,k-tmp);
    }
    int main(){
        freopen("Cola.txt","r",stdin);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            val[i]=hash[i]=a[i];
        }
        sort(a+1,a+n+1);
        cnt=unique(a+1,a+n+1)-a-1;
        for(int i=1;i<=n;i++){
            hash[i]=lower_bound(a+1,a+cnt+1,hash[i])-a;
            w[hash[i]]=val[i];
        }
        for(int i=1;i<=n;i++)
            insert(root[i-1],root[i],1,cnt,hash[i]);
        int l,r;
        for(int i=1;i<=m;i++){
            scanf("%d%d",&l,&r);
            printf("%d
    ",w[query(root[l-1],root[r],1,cnt,(r-l+2)/2)]);
        }
        return 0;
    }
  • 相关阅读:
    查看Java中每个数据类型所占的位数,和表示数值的范围,并得出结论。
    同名变量的屏蔽原则
    反码,补码,原码
    机器学习概念性知识总结
    图的最短路径问题
    System Design 笔记及代码(系统设计)
    2016网易游戏实习算法题解(今年找暑期实习的时候参加的)
    Google java style
    18.1---不用加号的加法(CC150)
    Java模板模式(template)
  • 原文地址:https://www.cnblogs.com/thmyl/p/8717206.html
Copyright © 2011-2022 走看看