Pagini recente » Cod sursa (job #1112268) | Cod sursa (job #2444285) | Cod sursa (job #1773218) | Cod sursa (job #666764) | Cod sursa (job #1076210)
#include <cstdio>
#include <algorithm>
#include <functional>
using namespace std;
int n, k;
int v[100001];
long long cautare_binara (long long stanga, long long dreapta, long long solutie = -1)
{
if (stanga <= dreapta)
{
long long mijloc = (stanga + dreapta) / 2;
long long suma = accumulate (v + 1, v + n + 1, 0, [&mijloc](long long acc, int val){
if (val > mijloc)
return acc + mijloc;
else
return acc + val;
});
if (suma >= mijloc * k)
return cautare_binara (mijloc + 1, dreapta, mijloc);
else
return cautare_binara (stanga, mijloc - 1, solutie);
}
return solutie;
}
int main ()
{
FILE *in, *out;
in = fopen ("grupuri.in", "r");
out = fopen ("grupuri.out", "w");
fscanf (in, "%d %d", &k, &n);
long long suma = 0;
for (int i = 1; i <= n; ++i)
{
fscanf (in, "%d", &v[i]);
suma += v[i];
}
long long solutie = cautare_binara (1, suma / k);
fprintf (out, "%lld", solutie);
fclose (in);
fclose (out);
return 0;
}