Pagini recente » Cod sursa (job #286229) | Cod sursa (job #1705893) | Cod sursa (job #1934906) | Cod sursa (job #359713) | Cod sursa (job #464660)
Cod sursa(job #464660)
/*
* File: Caramizi.cpp
* Author: marius
*
* Created on June 21, 2010, 9:24 AM
*/
#include <cstdio>
using namespace std;
#include <list>
list<int> v;
list<int> t;
unsigned int r[200005];
int main(int argc, char** argv) {
freopen("caramizi.in","r",stdin);
freopen("caramizi.out","w",stdout);
int n,m,x;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&x);
v.push_back(x);
}
v.sort();
int val;
list<int>::iterator it,it2;
for(int l=1;l<=n;l++){
t=list<int>(v);
while(t.size()>=l){
it=t.begin();
for(int i=0;i<t.size()-l;i++)
it++;
val=*it;
r[l]+=val;
if(t.size()==l)
break;
it=t.erase(it);
it2=t.begin();
for(;it!=t.end();it=t.erase(it)){
x=*it-val;
while(*it2<x)
it2++;
t.insert(it2,x);
}
}
}
unsigned long long max=0;
for(;m;m--){
scanf("%d",&x);
unsigned long long i;
for(i=n;i>=0;i--)
if(r[i]>x)
break;
else if(max<r[i]*i)
max=r[i]*i;
if(max<x*i)
max=x*i;
printf("%llu\n",max);
}
return 0;
}