zoukankan      html  css  js  c++  java
  • [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;
    }
  • 相关阅读:
    用C# WebClient类 提交数据
    a标签弹出 文件上载框
    C中 #define
    五款专业文本编辑器比较(转贴)
    IE和Firefox(火狐)在JavaScript方面的不兼容及统一方法总结
    全球历史票房排行
    ASP调用带参数存储过程的几种方式
    VB6.0如何使用正则表达式
    实现VB与EXCEL的无缝连接
    初识Firebug 全文 — firebug的使用
  • 原文地址:https://www.cnblogs.com/Zars19/p/6775196.html
Copyright © 2011-2022 走看看