제출 #705477

#제출 시각아이디문제언어결과실행 시간메모리
705477pavementBigger segments (IZhO19_segments)C++17
13 / 100
1 ms340 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]; ll p[500005]; pair<int, ll> dp[500005]; set<pair<int, pair<int, ll> > > S; pair<int, ll> qry(ll p) { auto it = S.upper_bound(mp(p, mp(INT_MAX, LLONG_MAX))); if (it == S.begin()) return mp(-1, -1ll); --it; return it->second; } void upd(ll p, pair<int, ll> v) { if (qry(p) >= v) return; auto it = S.lower_bound(mp(p, mp(-1, -1ll))); vector<set<pair<int, pair<int, ll> > >::iterator> to_del; while (it != S.end() && it->second <= v) { to_del.pb(it); ++it; } for (auto it : to_del) S.erase(it); S.emplace(p, v); } main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; p[i] = a[i] + p[i - 1]; assert(-(ll)1e16 <= p[i] && p[i] <= (ll)1e16); auto tmp = qry(p[i]); tmp.second -= p[i]; dp[i] = max(mp(1, -p[i]), tmp); assert(-(ll)1e16 <= p[i] - dp[i].second && p[i] - dp[i].second <= (ll)1e16); upd(p[i] - dp[i].second, mp(dp[i].first + 1, p[i])); } cout << dp[n].first << '\n'; }

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

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