Pagini recente » Cod sursa (job #147471) | Cod sursa (job #92985) | Cod sursa (job #3165358) | Cod sursa (job #3165357) | Cod sursa (job #1766452)
#include <bits/stdc++.h>
using namespace std;
int a,b,globalMinus = 0;
int salt[16001],sum[16001];
int findBest(int low, int up,int ans){
while (low <= up)
{
int mid = low + (up-low)/2;
if (sum[mid] - globalMinus == ans)
return mid;
if (sum[mid] - globalMinus < ans)
low = mid + 1;
else
up = mid - 1;
}
return up;
}
int main(){
//ifstream fin("input.in");
ifstream fin("transport.in");
ofstream fou("transport.out");
ios_base::sync_with_stdio(0);
int n,k,ans = -1;
fin >> n >> k;
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++){
fin >> salt[i];
sum[0] += salt[i];
sum[i] = sum[0];
if(salt[i] > ans)
ans = salt[i];
}
int copyOfK = k;
int low = 1,up = n;
while( k > 0 ){
a = low;
b = findBest(low, up, ans);
low = b + 1;
globalMinus = sum[b];
k--;
if(k > 0 && low > up){
cout << ans;
return(0);
}
if(k == 0 && low <= up){
k = copyOfK;
low = 1;
up = n;
ans++;
globalMinus = 0;
}
}
fou << ans;
}