제출 #705412

#제출 시각아이디문제언어결과실행 시간메모리
705412pavementBigger segments (IZhO19_segments)C++17
37 / 100
268 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 cc() { if (S == E || left != nullptr) return; int M = (S + E) / 2; left = new node(S, M); right = new node(M + 1, E); } void upd(int p, ii v) { if (S == E) { val = max(val, v); return; } int M = (S + E) / 2; cc(); if (p <= M) left->upd(p, v); else right->upd(p, v); val = max(left->val, right->val); } ii qry(int p) { if (p < S) return mp(-(int)1e16, -(int)1e16); if (E <= p) return val; if (left == nullptr) return val; return max(left->qry(p), 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]; auto tmp = root->qry(p[i]); tmp.second -= p[i]; dp[i] = max(mp(1ll, -p[i]), tmp); root->upd(p[i] - dp[i].second, mp(dp[i].first + 1, p[i])); } cout << dp[n].first << '\n'; }

컴파일 시 표준 에러 (stderr) 메시지

segments.cpp:59:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   59 | 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...