• [HDU 2665&POJ 2104]K-th Number(主席树)


    Description

    Give you a sequence and ask you the kth big number of a inteval.

    Solution

    主席树模板题

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cstdlib>
    #define MAXN 100005
    using namespace std;
    int T,n,m,sz,tot;
    int a[MAXN],b[MAXN],rt[MAXN],ls[MAXN*20],rs[MAXN*20],sum[MAXN*20];
    int read()
    {
        int x=0,f=1;char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')f=-1;c=getchar();
        }
        while(c>='0'&&c<='9'){
            x=x*10+c-'0';c=getchar();
        }
        return x*f;
    }
    void build(int &idx,int l,int r)
    {
        ++tot,idx=tot;sum[idx]=0;
        if(l==r)return;
        int mid=(l+r)>>1;
        build(ls[idx],l,mid);
        build(rs[idx],mid+1,r);
    }
    void insert(int &idx,int l,int r,int last,int pos)
    {
        ++tot,idx=tot;
        ls[idx]=ls[last];
        rs[idx]=rs[last];
        sum[idx]=sum[last]+1;
        if(l==r)return;
        int mid=(l+r)>>1;
        if(pos<=mid)insert(ls[idx],l,mid,ls[last],pos);
        else insert(rs[idx],mid+1,r,rs[last],pos);
    }
    int query(int s,int t,int l,int r,int k)
    {
        if(l==r)return l;
        int cnt=sum[ls[t]]-sum[ls[s]];
        int mid=(l+r)>>1;
        if(cnt>=k)return query(ls[s],ls[t],l,mid,k);
        else return query(rs[s],rs[t],mid+1,r,k-cnt);
    }
    int main()
    {
        T=read();
        while(T--)
        {
            n=read(),m=read();tot=0;
            for(int i=1;i<=n;i++)b[i]=a[i]=read();
            sort(a+1,a+1+n);
            sz=unique(a+1,a+1+n)-(a+1);
            for(int i=1;i<=n;i++)b[i]=lower_bound(a+1,a+1+sz,b[i])-a;
            build(rt[0],1,sz);
            for(int i=1;i<=n;i++)
            insert(rt[i],1,sz,rt[i-1],b[i]);
            for(int i=1;i<=m;i++)
            {
                int s=read(),t=read(),k=read();
                int ans=query(rt[s-1],rt[t],1,sz,k);
                printf("%d
    ",a[ans]);
            }
        }
        return 0;
    }
  • 相关阅读:
    window10-jmeter安装
    软件开发模型
    软件测试的原则和流程
    手机APP测试
    优秀的软件测试工程师
    自动化测试
    测试用例
    软件测试功能分类
    ios-prefix文件最全
    催收策略及催收评分卡搭建
  • 原文地址:https://www.cnblogs.com/Zars19/p/6775196.html
Copyright © 2020-2023  润新知