Pagini recente » Cod sursa (job #1742401) | Cod sursa (job #2434015) | Cod sursa (job #1059795) | Istoria paginii runda/piscot256/clasament | Cod sursa (job #2343282)
#include <cstdio>
using namespace std;
int v[100005],a[100005][1001];
int main()
{
long long s=0,s1=0;
freopen("grupuri.in","r",stdin);
freopen("grupuri.out","w",stdout);
int k,n,i,st,dr,ok,x,i1,j1,y,nr,k1,dr1,cop;
scanf("%d%d",&k,&n);
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
s=s+v[i];
if(v[i]<k)
{
cop=i;
s1=s1+v[i];
}
}
st=1;
dr=s/k;
if(v[n]<=dr)
printf("%d",dr);
else
{
k1=k-(n-cop);
dr1=s1/k1;
if(v[cop]<=dr1)
printf("%d",k1+n-cop);
else
{
while(st<=dr)
{
ok=0;
x=(st+dr)/2;
i1=j1=1;
for(i=1;i<=n&&i1<=k&&v[i]<x;i++)
{
y=v[i];
while(j1<=x&&y!=0)
{
a[i1][j1]=i;
y--;
j1++;
}
if(j1==x+1)
{
j1=1;
i1++;
}
while(y!=0)
{
a[i1][j1]=i;
y--;
j1++;
}
}
if(i!=n+1)
i1=i1+(n-i+1);
if(i1>=k+1)
ok=1;
if(ok==1)
{
nr=x;
st=x+1;
}
else
dr=x-1;
}
printf("%d",nr);
}
}
return 0;
}