Pagini recente » Cod sursa (job #2777520) | Cod sursa (job #1456250) | Cod sursa (job #3180295) | Cod sursa (job #434458) | Cod sursa (job #2349734)
#include <fstream>
using namespace std;
ifstream fin("grupuri.in");
ofstream fout("grupuri.out");
int a[100005], k, n;
int test(long long nrG)
{
int poz = 0;
int st = 1;
int dr = n;
while(st <= dr)
{
int mij = (st + dr) / 2;
if(a[mij] < nrG)
{
poz = mij;
st = mij + 1;
}
else
dr = mij - 1;
}
++poz;
int nrLOc = n - poz + 1;
int cnt = 0;
for(int i = poz - 1; i >= 1; --i)
{
cnt += a[i];
if(cnt >= nrG)
{
nrLOc++;
cnt %= nrG;
}
}
if(nrLOc > k)
return 2;
if(nrLOc == k)
return 1;
return 0;
}
int main()
{
fin >> k >> n;
for(int i = 1; i <= n; ++i)
fin >> a[i];
int afis = -1;
int st = 1;
long long dr = 100000000005;
while(st <= dr)
{
long long mij = (st + dr) / 2;
int val = test(mij);
if(val == 1)
{
afis = mij;
st = mij + 1;
}
else if(val == 2)
st = mij + 1;
else
dr = mij - 1;
}
fout << afis << '\n';
return 0;
}