zoukankan      html  css  js  c++  java
  • luogu P1533 可怜的狗狗

    题目链接

    luogu P1533 可怜的狗狗

    题解

    主席树.

    代码

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N = 300001;
    int ls[N*20],rs[N*20],sum[N*20];
    int n,m,a[N],hash[N],cnt,root[N];
    int x,y,k;
    void lsh()
    {
        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+cnt+1,a[i])-hash;
    }
    int tot=0;
    void build(int l,int r,int &rt,int pre,int w)
    {
        rt=++tot;
        sum[rt]=sum[pre]+1;
        if(l==r)return;
        int mid=(l+r)>>1;
        if(w<=mid)rs[rt]=rs[pre],build(l,mid,ls[rt],ls[pre],w);
        else ls[rt]=ls[pre],build(mid+1,r,rs[rt],rs[pre],w);
    }
    int query(int l,int r,int x,int y,int k)
    {
        if(l==r)return l;
        int mid=l+r>>1,tmp=sum[ls[y]]-sum[ls[x]];
        if(tmp>=k)return query(l,mid,ls[x],ls[y],k);
        else return query(mid+1,r,rs[x],rs[y],k-tmp);
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)scanf("%d",a+i),hash[i]=a[i];
        lsh();
    //    printf("%d
    ",cnt);for(int i=1;i<=cnt;i++) printf("%d ",hash[i]);
        for(int i=1;i<=n;i++) build(1,cnt,root[i],root[i-1],a[i]);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d%d",&x,&y,&k);
            printf("%d
    ",hash[query(1,cnt,root[x-1],root[y],k)]);
        }
        return 0;
    }
    
  • 相关阅读:
    EVM靶机渗透
    Joomla漏洞复现
    渗透测试
    Kali软件库认识
    谷歌hack语法
    Metasploit学习
    sqli-labs less-17
    sqli-labs(less-11-16)
    sqli-labs (less-8-less-10)
    less-7
  • 原文地址:https://www.cnblogs.com/sssy/p/8969729.html
Copyright © 2011-2022 走看看