zoukankan      html  css  js  c++  java
  • POJ2104:K-th Number——题解

    http://poj.org/problem?id=2104

    题目大意:求区间第k小。

    ——————————————————————————

    主席树板子题。

    ……我看了半天现在还是一知半解的状态所以应该不会出讲解了。

    #include<cstdio>
    #include<queue>
    #include<cctype>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<algorithm>
    using namespace std;
    const int N=100001;
    inline int read(){
        int X=0,w=0;char ch=0;
        while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
        while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
        return w?-X:X;
    }
    struct tree{
        int l;
        int r;
        int sum;
    }tr[N*20];
    int a[N],b[N],rt[N],n,m,q,pool;
    inline void insert(int &y,int &x,int l,int r,int p){
        tr[x=++pool]=tr[y];
        tr[x].sum++;
        if(l==r)return;
        int mid=(l+r)>>1;
        if(p<=mid)insert(tr[y].l,tr[x].l,l,mid,p);
        else insert(tr[y].r,tr[x].r,mid+1,r,p);
        return;
    }
    inline int query(int nl,int nr,int l,int r,int k){
        if(l==r)return l;
        int delta=tr[tr[nr].l].sum-tr[tr[nl].l].sum;
        int mid=(l+r)>>1;
        if(delta>=k)return query(tr[nl].l,tr[nr].l,l,mid,k);
        else return query(tr[nl].r,tr[nr].r,mid+1,r,k-delta);
    }
    inline void LSH(){
        m=n;
        sort(b+1,b+m+1);
        m=unique(b+1,b+m+1)-b-1;
        for(int i=1;i<=n;i++){
        a[i]=lower_bound(b+1,b+m+1,a[i])-b;
        }
        return;
    }
    int main(){
        n=read();
        q=read();
        for(int i=1;i<=n;i++)a[i]=b[i]=read();
        LSH();
        for(int i=1;i<=n;i++)insert(rt[i-1],rt[i],1,m,a[i]);
        for(int i=1;i<=q;i++){
        int l=read(),r=read(),k=read();
        printf("%d
    ",b[query(rt[l-1],rt[r],1,m,k)]);
        }
        return 0;
    }
  • 相关阅读:
    5
    4
    3
    crontab -e 报错(E518: Unknown option: foldenable)
    解决无法修改日志时间的问题(Local time zone must be set--see zic manual page 2019 )
    ping测试丢包率
    关闭SELinux
    iotop使用方法
    mysql的备份
    修改uid gid 的起始范围
  • 原文地址:https://www.cnblogs.com/luyouqi233/p/8136270.html
Copyright © 2011-2022 走看看