zoukankan      html  css  js  c++  java
  • Codeforces 1181D

    D. Irrigation
    time limit per test
    2.5 seconds
    memory limit per test
    512 megabytes
    input
    standard input
    output
    standard output

    Misha was interested in water delivery from childhood. That's why his mother sent him to the annual Innovative Olympiad in Irrigation (IOI). Pupils from all Berland compete there demonstrating their skills in watering. It is extremely expensive to host such an olympiad, so after the first nn olympiads the organizers introduced the following rule of the host city selection.

    The host cities of the olympiads are selected in the following way. There are mm cities in Berland wishing to host the olympiad, they are numbered from 11 to mm. The host city of each next olympiad is determined as the city that hosted the olympiad the smallest number of times before. If there are several such cities, the city with the smallest index is selected among them.

    Misha's mother is interested where the olympiad will be held in some specific years. The only information she knows is the above selection rule and the host cities of the first nn olympiads. Help her and if you succeed, she will ask Misha to avoid flooding your house.

    Input

    The first line contains three integers nn, mm and qq (1n,m,q5000001≤n,m,q≤500000) — the number of olympiads before the rule was introduced, the number of cities in Berland wishing to host the olympiad, and the number of years Misha's mother is interested in, respectively.

    The next line contains nn integers a1,a2,,ana1,a2,…,an (1aim1≤ai≤m), where aiai denotes the city which hosted the olympiad in the ii-th year. Note that before the rule was introduced the host city was chosen arbitrarily.

    Each of the next qq lines contains an integer kiki (n+1ki1018n+1≤ki≤1018) — the year number Misha's mother is interested in host city in.

    Output

    Print qq integers. The ii-th of them should be the city the olympiad will be hosted in the year kiki.

    Examples
    input
    Copy
    6 4 10
    3 1 1 1 2 2
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    output
    Copy
    4
    3
    4
    2
    3
    4
    1
    2
    3
    4
    
    input
    Copy
    4 5 4
    4 4 5 1
    15
    9
    13
    6
    
    output
    Copy
    5
    3
    3
    3
    
    Note

    In the first example Misha's mother is interested in the first 1010 years after the rule was introduced. The host cities these years are 4, 3, 4, 2, 3, 4, 1, 2, 3, 4.

    In the second example the host cities after the new city is introduced are 2, 3, 1, 2, 3, 5, 1, 2, 3, 4, 5, 1.

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #define maxn (1<<19)
    using namespace std;
    int n,m,q,a[maxn],t[maxn*4],r[maxn];
    struct node{
        int id;
        long long x;
    }qq[maxn];
    bool cmp(int x,int y){
        if(a[x]!=a[y])return a[x]<a[y];
        else return x<y;
    }
    bool cmp1(node x,node y){
        return x.x<y.x;
    }
    bool cmp2(node x,node y){
        return x.id<y.id;
    }
    int find(int x){
        int p=(1<<18),ans=0,lb=p;
        while(lb){
            lb>>=1;
            if(t[p]>=x)p-=lb;
            else {
                ans=p;
                x-=t[p];
                p+=lb;
            }
        }
        return ans+1;
    } 
    void add(int p){
        while(p<(1<<19)){
            t[p]++;
            p+=p&(-p);
        }
    }
    int main(){
        scanf("%d%d%d",&n,&m,&q);
        for(int i=1,x;i<=n;i++){
            scanf("%d",&x);
            a[x]++;
        }
        for(int i=1;i<=m;i++)r[i]=i;
        sort(r+1,r+m+1,cmp);
        for(int i=0;i<q;i++){
            scanf("%lld",&qq[i].x);
            qq[i].id=i;
        }
        sort(qq,qq+q,cmp1);
        long long s=n;
        int l=0;
        for(int i=1;i<=m;i++){
            long long sx=s;
            if(i==m)s=2e18;
            else s+=1LL*(a[r[i+1]]-a[r[i]])*i;
            add(r[i]);
            while(l<q&&qq[l].x<=s){
                qq[l].x=find((qq[l].x-sx-1)%i+1);
                l++;
            }
        }
        sort(qq,qq+q,cmp2);
        for(int i=0;i<q;i++){
            printf("%lld
    ",qq[i].x);
        }
        return 0;
    }
  • 相关阅读:
    Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里
    linux coreseek-4.1安装
    8个必备的PHP功能开发
    LINUX 下mysql导出数据、表结构
    PHP缩略图类
    PHP文件上传类
    PHP抓取页面的几种方式
    MySQL性能优化的最佳20+条经验
    zend studio9.0.3破解及汉化 windons版
    【转载】【面试经验】PHP中级面试题
  • 原文地址:https://www.cnblogs.com/thmyl/p/12185183.html
Copyright © 2011-2022 走看看