Submission #1359144

#TimeUsernameProblemLanguageResultExecution timeMemory
1359144kunzaZa183Bigger segments (IZhO19_segments)C++20
13 / 100
0 ms348 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
  int n;
  cin >> n;
  vector<int> vi(n + 1), qs;
  vector<pair<int, int>> dp(n + 1);

  for (int i = 1; i <= n; i++)
    cin >> vi[i];

  qs = vi;
  for (int i = 1; i <= n; i++)
    qs[i] += qs[i - 1];

  for (int i = 1; i <= n; i++) {
    int l = 1, r = i;
    while (l < r) {
      int mid = (l + r + 1) / 2;

      if (dp[mid - 1].first > qs[i] - qs[mid - 1]) {
        r = mid - 1;
      } else {
        l = mid;
      }
    }

    dp[i] = {qs[i] - qs[l - 1], dp[l - 1].second + 1};
  }

  // for (auto [a, b] : dp)
  //   cout << a << " " << b << "\n";

  cout << dp.back().second << "\n";
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...