Cod sursa(job #2607636)

Utilizator Stefan_RaduStefan Radu Stefan_Radu Data 29 aprilie 2020 22:34:10
Problema Transport Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
// By Stefan Radu

#include <algorithm>
#include <fstream>
#include <iomanip>
#include <cassert>
#include <vector>
#include <string>
#include <cctype>
#include <queue>
#include <deque>
#include <cmath>
#include <stack>
#include <map>
#include <set>

using namespace std;

ifstream cin("transport.in");
ofstream cout("transport.out");

#define sz(x) (int)(x).size()

typedef pair < int, int > pii;
typedef long long ll;
typedef long double ld;
typedef unsigned int ui;
typedef unsigned long long ull;

const int MAX_VAL = 256000001;

int main() {

#ifdef STEF
  freopen("input", "r", stdin);
  freopen("output", "w", stdout);
#endif

  ios::sync_with_stdio(false);
  cin.tie(0);cout.tie(0);

  int n, k;
  cin >> n >> k;

  vector < int > v(n);
  for (int &x : v) cin >> x;

  int st = 1, dr = MAX_VAL, sol = -1;
  while (st <= dr) {

    int mid = (1ll * st + dr) >> 1;

    int curSum = 0, cnt = 0;
    for (int &x : v) {
      if (curSum + x > mid) {
        ++ cnt;
        curSum = x;
      }
      else {
        curSum += x;
      }
    }

    if (curSum) ++ cnt;

    if (cnt <= k) {
      sol = mid;
      dr = mid - 1;
    }
    else {
      st = mid + 1;
    }
  }

  cout << sol << '\n';
}