#include #include #include #include #include #include #include using namespace std; typedef long long ll; const ll INF = 1e18; int N, K; ll A[100005]; ll sum[200005]; ll next_offset[100005][20]; void build(ll m){ for(int i = 0; i < N; i++){ auto p = lower_bound(sum, sum+2*N+2, sum[i]+m); next_offset[i][0] = (p-(sum+i)); } for(int j = 1; j < 18; j++){ for(int i = 0; i < N; i++){ next_offset[i][j] = next_offset[i][j-1]+next_offset[(i+next_offset[i][j-1])%N][j-1]; } } } ll cnt(int s){ ll ans = 0; for(int i = 0; i < 18; i++){ if(K&(1<> N >> K; for(int i = 0; i < N; i++){ cin >> A[i]; sum[i+1] = sum[i]+A[i]; } for(int i = N; i < 2*N; i++){ sum[i+1] = sum[i]+A[i%N]; } sum[2*N+1] = INF; ll l = 1, r = INF/2; while(r-l > 1){ ll c = (l+r)/2; build(c); bool ok = false; for(int i = 0; i < N; i++){ ll tmp = cnt(i); if(tmp <= N) ok = true; } if(ok) l = c; else r = c; } cout << l << endl; }