zoukankan      html  css  js  c++  java
  • AC日记——曼哈顿交易 洛谷 P3730

    曼哈顿交易

    思路:

      都是套路;

    代码:

    #include <cmath>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    #define maxn 100005
    
    int n,m,bel[maxn],num[maxn],ai[maxn],size,block;
    int ans[maxn],num_[maxn],num__[maxn],cnt,bi[maxn];
    
    struct QueryType {
        int l,r,k,id;
        
        bool operator<(const QueryType &o)const{
            if(bel[l]==bel[o.l]) return (bel[l]&1)?r>o.r:r<o.r;
            return l<o.l;
        }
    };
    struct QueryType qu[maxn];
    
    inline void in(int &now)
    {
        char Cget=getchar();now=0;
        while(Cget>'9'||Cget<'0') Cget=getchar();
        while(Cget>='0'&&Cget<='9')
        {
            now=now*10+Cget-'0';
            Cget=getchar();
        }
    }
    
    inline void updata(int x)
    {
        if(num[x]) num_[num[x]]--,num__[bel[num[x]]]--;
        else cnt++;
        num_[++num[x]]++,num__[bel[num[x]]]++;
    }
    
    inline void updata_(int x)
    {
        num_[num[x]]--,num__[bel[num[x]--]]--;;
        if(num[x]) num_[num[x]]++,num__[bel[num[x]]]++;
        else cnt--;
    }
    
    inline int query(int k)
    {
        if(k>cnt) return -1;
        int i=0;for(;k>num__[i];k-=num__[i++]);
        int j=i*block;for(;k>num_[j];k-=num_[j++]);
        return j;
    }
    
    int main()
    {
        freopen("trade.in","r",stdin);
        freopen("trade.out","w",stdout);
        in(n),in(m),block=sqrt(n);
        for(int i=1;i<=n;i++) in(ai[i]),bi[i]=ai[i],bel[i]=i/block;
        sort(bi+1,bi+n+1),size=unique(bi+1,bi+n+1)-bi-1;
        for(int i=1;i<=n;i++) ai[i]=lower_bound(bi+1,bi+size+1,ai[i])-bi;
        for(int i=1;i<=m;i++) in(qu[i].l),in(qu[i].r),in(qu[i].k),qu[i].id=i;
        int l=1,r=0;sort(qu+1,qu+m+1);
        for(int no=1;no<=m;no++)
        {
            while(r<qu[no].r) updata(ai[++r]);
            while(r>qu[no].r) updata_(ai[r--]);
            while(l<qu[no].l) updata_(ai[l++]);
            while(l>qu[no].l) updata(ai[--l]);
            ans[qu[no].id]=query(qu[no].k);
        }
        for(int i=1;i<=m;i++) printf("%d
    ",ans[i]);
        return 0;
    }
  • 相关阅读:
    力扣338. 比特位计数
    力扣22. 括号生成
    力扣46. 全排列
    力扣461. 汉明距离
    力扣617. 合并二叉树
    zabbix环境搭建部署(一)
    cacti,zabbix,nagios各自原理及区别
    两个硬盘对拷图解
    自动化运维之SaltStack实践
    nginx配置ssl证书
  • 原文地址:https://www.cnblogs.com/IUUUUUUUskyyy/p/6914500.html
Copyright © 2011-2022 走看看