Pagini recente » Cod sursa (job #1713752) | Cod sursa (job #1579495) | Cod sursa (job #1996098) | Cod sursa (job #2582502) | Cod sursa (job #1119408)
#include<fstream>
#include<algorithm>
#define NMAX 100010
using namespace std;
long long a[NMAX], aux[NMAX], sum;
int n, k;
ifstream f("grupuri.in");
ofstream g("grupuri.out");
bool cmp(int A, int B)
{
return B<A;
}
void Citeste()
{
int i;
f>>k>>n;
for (i=1; i<=n; ++i)
{
f>>a[n-i+1];
sum+=a[n-i+1];
}
}
bool valid(long long x)
{
int i, j=1, nr, r=0;
for (i=1; i<=n; ++i) aux[i]=a[i];
for (i=1; i<=k; ++i)
{
nr=x;
if (aux[j]<x)
{
aux[j]+=r;
while (nr>aux[j++] && j<=n)
{
nr-=aux[j++];
}
aux[j]-=nr;
r=aux[j];
}
else
if (j<=n) ++j;
if (j==n+1 && (i!=k || (i==k && nr!=0))) return 0;
}
return 1;
}
void Solve()
{
long long st=1, dr=sum/k, mij, sol=0;
while (st<=dr)
{
mij=(st+dr)/2;
if (valid(mij))
{
sol=mij;
st=mij+1;
}
else dr=mij-1;
}
g<<sol<<"\n";
}
int main()
{
Citeste();
Solve();
f.close();
g.close();
return 0;
}