Pagini recente » Cod sursa (job #1017108) | Cod sursa (job #1214907) | Cod sursa (job #2696679) | Cod sursa (job #846074) | Cod sursa (job #1023140)
#include <fstream>
#include <vector>
#include <set>
using namespace std;
ifstream cin("grupuri.in");
ofstream cout("grupuri.out");
const int nmax = int(1e5) + 2;
int N, K;
long long a[nmax];
int main()
{
cin>>K>>N;
for(int i = 1;i <= N;i++) {
cin>>a[i];
a[i] += a[i - 1];
}
auto canGroup = [] (const int &G) {
if(a[1] > G) {
return 1ll*N*G >= 1ll*K*G;
}
int pos = 1;
for(int step = 1<<20;step > 0;step >>= 1) {
if(pos + step <= N && a[pos + step] - a[pos + step - 1] <= G) {
pos += step;
}
}
return a[pos] + 1ll*G*(N - pos) >= 1ll*K*G;
};
int ans = 0;
for(int step = 1<<30;step > 0;step >>= 1) {
if(canGroup(ans + step)) {
ans += step;
}
}
cout<<ans;
return 0;
}