Submission #344556

#TimeUsernameProblemLanguageResultExecution timeMemory
344556kekWwBigger segments (IZhO19_segments)C++17
0 / 100
1 ms364 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cmath>
#include <map>
#include <unordered_set>
#include <tuple>
#include <queue>
#include <set>
#include <cstring>
#include <functional>
#include <random>
#include <chrono>
#include <cassert>
#include <iomanip>
// #include <ext/pb_ds/assoc_container.hpp>

#define ar array
#define all(arr) (arr).begin(), (arr).end()
#define range(i, n) for (int i=0; i < (n); ++i)
#define rall(arr) (arr).rbegin(), (arr).rend()

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;

using namespace std;

// using namespace __gnu_pbds;
/*
typedef tree<
int,
null_type,
less<int>,
rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;
*/

const ll INF = 1e18;
const int INFi = 2e9;
const int maxN = 5e5 + 5;
const int md2 = 998244353;
const int md3 = 1e9 + 7;

double getTime() { return clock() / (double) CLOCKS_PER_SEC; }

void solve() {
    int n;
    cin >> n;
    vector<int> a(n);
    int ans = 0;
    range(i, n) cin >> a[i];
    vector<pair<int, ll>> segs;
    segs.emplace_back(1, a[0]);
    while(segs.back().first != n) {
        ll cur = 0;
        for(int j = segs.back().first; j < n; ++j) {
            cur += a[j];
            if (cur >= segs.back().second) {
                segs.emplace_back(j + 1, cur);
                cur = -1;
                break;
            }
        }
        if (cur != -1) break;
        if (segs.back().first == n) break;
        int sz = segs.size();
        while(segs[sz-2].second + a[segs[sz-2].first] * 2 <= segs[sz-1].second) {
            segs[sz-2].second += a[segs[sz-2].first];
            segs[sz-1].second -= a[segs[sz-2].first];
            segs[sz-2].first++;
        }
    }
    cout << segs.size() << '\n';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    // cout << setprecision(15) << fixed;
    int tests = 1;
    // cin >> tests;
    range(_, tests) {
        solve();
    }
    return 0;
}

Compilation message (stderr)

segments.cpp: In function 'void solve()':
segments.cpp:53:9: warning: unused variable 'ans' [-Wunused-variable]
   53 |     int ans = 0;
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...