Pagini recente » Cod sursa (job #1543176) | Cod sursa (job #1041452) | Cod sursa (job #2341440) | Cod sursa (job #938464) | Cod sursa (job #2349740)
#include <fstream>
using namespace std;
ifstream fin("grupuri.in");
ofstream fout("grupuri.out");
int a[100005], k, n;
long long s[100005];
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;
nrLOc += (s[poz - 1] / 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];
s[i] = s[i - 1] + 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;
}