Pagini recente » Cod sursa (job #2398046) | Cod sursa (job #2944556) | Cod sursa (job #359953) | Cod sursa (job #1288226) | Cod sursa (job #2291284)
#include <cstdio>
#include <algorithm>
using namespace std;
#define lli long long int
FILE *fin = freopen("grupuri.in", "r",stdin);
FILE *fout = freopen("grupuri.out","w",stdout);
static const int NMAX = 1e5+5;
lli n,k;
lli v[NMAX];
lli pref[NMAX];
lli sumTotal;
lli logN, pas;
lli log;
lli cb(lli x)
{
lli p = 0;
for(lli salt = log;salt ; salt>>=1)
{
if(salt+p <= n)
{
if(v[salt+p] <= x){
p+=salt;
}
}
}
return p;
}
bool Check(lli m)
{
lli s = 0;
lli poz = cb(m);
//printf("m %lld poz %lld ", m, poz);
s+=pref[poz];
//printf("s min %lld ", s);
s+=(n-poz) * m;
//printf("n-poz %lld\n",n-poz);
if(s >= m * k)
return true;
return false;
}
int main()
{
scanf("%lld%lld",&k,&n);
for(log=1; log<=n ; log<<=1);
for(int i= 1; i<= n; ++i)
{
scanf("%lld",&v[i]);
sumTotal+=v[i];
pref[i] = pref[i-1] + v[i];
}
for(logN = 1; logN <= sumTotal/k+1; logN<<=1);
for(;logN; logN >>=1)
{
if((pas + logN)*k <= sumTotal && Check((pas+logN)))
pas+=logN;
}
printf("%lld", pas);
return 0;
}