Cod sursa(job #897243)

Utilizator MagnvsDaniel Constantin Anghel Magnvs Data 27 februarie 2013 19:34:52
Problema Caramizi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <algorithm>
#include <fstream>

using namespace std;

ifstream fin("caramizi.in");
ofstream fout("caramizi.out");

typedef long long i64;
const int nmax= 200000, xmax= 1000000;

i64 s[nmax+1];
int freq[xmax+1];

int lo[xmax+1], hi[nmax+2];

int main(){
    int n, nq;
    fin>>n>>nq;
    for (int i= 1; i<=n; ++i){
        fin>>s[i];
        ++freq[s[i]];
    }
    sort(s+1, s+n+1);
    for (int i= 2; i<=n; ++i){
        s[i]+= s[i-1];
    }
    for (int i= xmax-1; i>0; --i){
        freq[i]+= freq[i+1];
    }

    for (int i= 1; i<=xmax; ++i){
        lo[i]= ((i64)freq[i]*i+s[n-freq[i]])/i*i;
        if (lo[i]<lo[i-1]){
            lo[i]= lo[i-1];
        }
    }
    for (int i= s[n]/(s[n]-s[n-1]); i>0; --i){
        hi[i]= s[n]-s[n]%i;  
        if (hi[i]<hi[i+1]){
            hi[i]= hi[i+1];
        }
    }

    for (int cq= 1; cq<=nq; ++cq){
        int x;
        fin>>x;
        if (x>xmax){
            fout<<hi[s[n]/x+1]<<"\n";
        }else{
            fout<<lo[x]<<"\n";
        }
    }

    return 0;
}