Submission #705414

#TimeUsernameProblemLanguageResultExecution timeMemory
705414pavementBigger segments (IZhO19_segments)C++17
73 / 100
317 ms262144 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define int long long #define mp make_pair #define mt make_tuple #define pb push_back #define ppb pop_back #define eb emplace_back #define g0(a) get<0>(a) #define g1(a) get<1>(a) #define g2(a) get<2>(a) #define g3(a) get<3>(a) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); using db = double; using ll = long long; using ld = long double; using ii = pair<int, int>; using iii = tuple<int, int, int>; using iiii = tuple<int, int, int, int>; template<class key, class value = null_type, class cmp = less<key> > using ordered_set = tree<key, value, cmp, rb_tree_tag, tree_order_statistics_node_update>; int n, a[500005], p[500005]; ii dp[500005]; struct node { node *left, *right; int S, E; ii val; node(int _s, int _e) : left(nullptr), right(nullptr), S(_s), E(_e), val(-(int)1e16, -(int)1e16) {} void upd(int p, ii v) { val = max(val, v); if (S == E) return; int M = (S + E) / 2; if (p <= M) { if (left == nullptr) left = new node(S, M); left->upd(p, v); } else { if (right == nullptr) right = new node(M + 1, E); right->upd(p, v); } } ii qry(int p) { if (p < S) return mp(-(int)1e16, -(int)1e16); if (E <= p) return val; return max(left == nullptr ? mp(-(int)1e16, -(int)1e16) : left->qry(p), right == nullptr ? mp(-(int)1e16, -(int)1e16) : right->qry(p)); } } *root; main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; root = new node(-(int)1e16, (int)1e16); for (int i = 1; i <= n; i++) { cin >> a[i]; p[i] = a[i] + p[i - 1]; assert(-(int)1e16 <= p[i] && p[i] <= (int)1e16); auto tmp = root->qry(p[i]); tmp.second -= p[i]; dp[i] = max(mp(1ll, -p[i]), tmp); assert(-(int)1e16 <= p[i] - dp[i].second && p[i] - dp[i].second <= (int)1e16); root->upd(p[i] - dp[i].second, mp(dp[i].first + 1, p[i])); } cout << dp[n].first << '\n'; }

Compilation message (stderr)

segments.cpp:53:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   53 | main() {
      | ^~~~
#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...