Pagini recente » Cod sursa (job #2341599) | Cod sursa (job #688694) | Cod sursa (job #2688365) | Cod sursa (job #537758) | Cod sursa (job #465012)
Cod sursa(job #465012)
program caramizi;
var f, g:text;
n, m, sum, nr:int64;
iii:longint;
c, v:array[0..1000001] of int64;
procedure citire;
var i:longint;
begin
readln(f,n,m);
for i:=1 to n do
read(f,c[i]);
end;
function pozitionare(i,j:longint):longint;
var x:int64;
begin
x:=c[i];
while i<j do
begin
while (j>i) and (c[j]>=x) do
j:=j-1;
v[i]:=v[j];
while (i<j) and (c[i]<=x) do
i:=i+1;
c[j]:=c[i];
end;
c[i]:=x;
pozitionare:=i;
end;
procedure Qsort(st,dr:longint);
var mm:longint;
begin
mm:=pozitionare(st,dr);
if st<mm-1 then
Qsort(st,mm-1);
if mm+1<dr then
Qsort(mm+1,dr);
end;
procedure rezolvare;
var i, j:longint;
begin
c[n+1]:=1000001;
for i:=0 to n do
begin
sum:=sum+c[i];
for j:=c[i] to c[i+1]-1 do
if j<>0 then
begin
v[j]:=(sum div j)*j+(n-i)*j;
if v[j-1]>v[j] then
v[j]:=v[j-1];
end;
end;
end;
procedure mai_mare;
var i, min:longint;
begin
min:=maxlongint;
for i:=c[n]+1 to nr do
if sum mod i<min then
begin
min:=sum mod i;
if min=0 then
break;
end;
writeln(g,sum-min);
end;
begin
assign(f,'caramizi.in'); reset(f);
assign(g,'caramizi.out'); rewrite(g);
citire;
Qsort(1,n);
rezolvare;
for iii:=1 to m do
begin
read(f,nr);
if nr<=1000000 then
writeln(g,v[nr])
else
mai_mare;
end;
close(f);
close(g);
end.