Cod sursa(job #899688)

Utilizator MagnvsDaniel Constantin Anghel Magnvs Data 28 februarie 2013 15:45:54
Problema Caramizi Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 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;
 
int v[nmax+2];
i64 lo[xmax+1], hi[nmax+2];
 
int main(){
    int n, nq;
    fin>>n>>nq;
    for (int i= 1; i<=n; ++i){
        fin>>v[i];
    }
    sort(v+1, v+n+1);
 
    for (int i= 1; i<v[1]; ++i){
        lo[i]= n*i;
    }
    i64 s= 0;
    v[n+1]= xmax+1;
    for (int i= 1; i<=n; ++i){
        s+= v[i];
        for (int j= v[i]; j<= v[i+1]; ++j){
            lo[j]= max(lo[j-1], s-s%j+((i64)n-i)*j);
        }
    }
    for (int i= s/v[n]; i>0; --i){
        hi[i]= max(hi[i+1], s-s%i);  
    }
 
    for (int cq= 1; cq<=nq; ++cq){
        int x;
        fin>>x;
        if (x<=xmax){
            fout<<lo[x]<<"\n";
        }else{
            fout<<hi[s/x+1]<<"\n";
        }
    }
 
    return 0;
}