1 #include<bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4 const ll INF = 1e18;
5 const int N = 1e5 + 10;
6 int n, m, t;
7 ll a[N], b[N];
8
9 ll MAX(ll a, ll b)
10 {
11 return a > b ? a : b;
12 }
13 /*
14 bool check(ll t)
15 {
16 ll now = n;
17 for(int i = 1 ; i <= n ; i++){
18 b[i] = a[i];
19 }
20 for(int i = 1 ; i <= m && now; i++){
21 ll tmp = t - now;
22 if(tmp < 0) break;//当前点无法到达
23 while(now >= 1 && b[now] <= t){
24 t -= b[now];
25 now--;
26 }
27 }
28 if(now < 1) return true;
29 return false;
30 }*/
31
32 bool check(ll mid)
33 {
34 ll cnt = m - 1, s = 0;
35 for(ll i = 1 ; i <= t ; i++){
36 s += a[i];
37 while(s + i > mid){
38 cnt--;
39 s -= mid - i;
40 if(cnt < 0) return false;
41 }
42 }
43 return true;
44 }
45
46 int main(){
47 scanf("%d %d",&n,&m);
48 for(int i = 1 ; i <= n ; i++){
49 scanf("%lld",&a[i]);
50 if(a[i]) t = i;
51 }
52 ll l = 1, r = INF, mid;
53 while(l < r){
54 mid = (l + r) >> 1;
55 if(check(mid)){
56 r = mid;
57 }else{
58 l = mid + 1;
59 }
60 }
61 printf("%lld
",l);
62
63
64 return 0;
65 }
hole 留个坑