zoukankan      html  css  js  c++  java
  • poj2104 K-th Number

    K-th Number

     POJ - 2104 

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #define maxn 100001
    using namespace std;
    int lc[maxn*18],rc[maxn*18],sum[maxn*18];
    int n,m,a[maxn],hash[maxn],cnt,root[maxn];
    int x,y,k;
    void discrete(){
        sort(hash+1,hash+n+1);
        cnt=unique(hash+1,hash+n+1)-(hash+1);
        for(int i=1;i<=n;i++)
            a[i]=lower_bound(hash+1,hash+n+1,a[i])-hash;
    }
    int query(int x,int y,int l,int r,int k){
        if(l==r)return l;
        int mid=(l+r)>>1;
        int tmp=sum[lc[y]]-sum[lc[x]];
        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 tot;
    void build(int x,int &y,int l,int r,int v){
        tot++;y=tot;
        sum[y]=sum[x]+1;
        if(l==r)return;
        int mid=(l+r)>>1;
        if(v<=mid){
            rc[y]=rc[x];
            build(lc[x],lc[y],l,mid,v);
        }
        else{
            lc[y]=lc[x];
            build(rc[x],rc[y],mid+1,r,v);
        }
    }
    int main(){
        freopen("Cola.txt","r",stdin);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]),hash[i]=a[i];
        discrete();//离散化 
        //建立n棵线段树 
        for(int i=1;i<=n;i++)build(root[i-1],root[i],1,cnt,a[i]);
        for(int i=1;i<=m;i++){
            scanf("%d%d%d",&x,&y,&k);
            printf("%d
    ",hash[query(root[x-1],root[y],1,cnt,k)]);
        }
    } 
  • 相关阅读:
    AC自动机解题记录
    German Collegiate Programming Contest 2018​ A. Attack on Alpha-Zet
    UVa-1152 4 Values Whose Sum Is 0
    2018 宁夏省赛 F. Moving On
    F
    PIL之基础应用
    数字数据转图片
    随机梯度下降实现
    回归分析效果度量
    线性回归分析
  • 原文地址:https://www.cnblogs.com/thmyl/p/8044065.html
Copyright © 2011-2022 走看看