Cod sursa(job #899561)

Utilizator MagnvsDaniel Constantin Anghel Magnvs Data 28 februarie 2013 15:10:27
Problema Caramizi Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 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];
 
i64 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;
}