Pagini recente » Cod sursa (job #68432) | Cod sursa (job #708181) | Cod sursa (job #3244193) | Cod sursa (job #1297362) | Cod sursa (job #1033358)
#include <iostream>
#include <fstream>
#define nmax 100005
#define inf (1<<30)
using namespace std;
int n, k, v[nmax], sol = 0, sum = 0;
bool check(int x) {
int levels = 0, onLevel = 0;
for(int i=n; i>=1; i--) {
if(v[i] >= x) levels++;
else {
onLevel += v[i];
//levels += onLevel / x;
//onLevel %= x;
}
}
levels += onLevel / x;
return (levels >= k);
}
int main() {
ifstream f("grupuri.in");
ofstream g("grupuri.out");
f>>k>>n;
for(int i=1; i<=n; i++) f>>v[i];
int lo = -1, mid, hi = inf;
while(hi - lo > 1) {
mid = (lo + hi) >> 1;
if(check(mid)) lo = mid;
else hi = mid;
}
// for(int i=1; i<=10; i++) cout<<"incerc cu "<<i<<" grupuri: "<<check(i)<<".\n";
g<<lo<<"\n";
return 0;
}