Pagini recente » Cod sursa (job #157320) | Profil ElefantulCici | Cod sursa (job #1279299) | Cod sursa (job #205223) | Cod sursa (job #2070710)
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <unordered_map>
#include <algorithm>
#if 1
#define pv(x) cout<<#x<<" = "<<x<<"; ";cout.flush()
#define pn cout<<endl
#else
#define pv(x)
#define pn
#endif
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
#define ll long long
#define ull unsigned long long
#define pb push_back
#define mp make_pair
const int NMax = 5e4 + 50;
const int sMax = 25e4 + 5;
typedef pair<int,int> point;
int N,K,mx;
int v[NMax];
bool can(int);
int main() {
in>>N>>K;
int sum = 0;
mx = 0;
for (int i=1;i <= N;++i) {
in>>v[i];
sum += v[i];
mx = max(mx,v[i]);
}
int pw = 1,pos = 0;
for (;pw <= sum;pw <<= 1) ;
pw >>= 1;
while (pw) {
if (can(pos+pw) == false) {
pos += pw;
}
pw >>= 1;
}
out<<pos+1<<'\n';
return 0;
}
bool can(int cap) {
if (cap < mx) {
return false;
}
int sum = 0, nr = 0;
for (int i=1;i <= N;++i) {
if (sum + v[i] > cap) {
++nr;
sum = v[i];
}
else {
sum += v[i];
}
}
if (sum != 0) {
++nr;
}
if (nr <= K) {
return true;
}
return false;
}