Submission #370717

#TimeUsernameProblemLanguageResultExecution timeMemory
370717Kevin_Zhang_TWBigger segments (IZhO19_segments)C++17
100 / 100
112 ms17036 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define pb emplace_back #define AI(i) begin(i), end(i) template<class T> bool chmin(T &a, T b) { return b < a && (a = b, true); } template<class T> bool chmax(T &a, T b) { return a < b && (a = b, true); } #ifdef KEV #define DE(args...) kout("[ " + string(#args) + " ] = ", args) void kout() { cerr << endl; } template<class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ', kout(b...); } template<class T> void debug(T L, T R) { while (L != R) cerr << *L << " \n"[next(L) == R], ++L; } #else #define DE(...) 0 #define debug(...) 0 #endif const int MAX_N = 500010; const ll inf = 1ll << 58; int dp[MAX_N], n; ll lstlen[MAX_N]; ll a[MAX_N], pf[MAX_N]; ll getb(int i) { return lstlen[i] + pf[i]; } int32_t main() { ios_base::sync_with_stdio(0), cin.tie(0); cin >> n; for (int i = 1;i <= n;++i) cin >> a[i], pf[i] = pf[i-1] + a[i]; auto valid = [&](int l, int r, int i) { return pf[i] - pf[r] >= pf[r] - pf[l-1]; }; deque <int> stk1, stk2; dp[1] = 1; lstlen[1] = a[1]; for (int i = 2;i <= n;++i) { dp[i] = dp[i-1]; lstlen[i] = lstlen[i-1] + a[i]; while (stk2.size()) { if (getb(stk2.back()) < getb(i-1)) break; stk2.pop_back(); } stk2.pb(i-1); if (pf[i] >= getb(stk2[0])) { ++dp[i]; lstlen[i] = inf; while (stk2.size()) { if (pf[i] < getb(stk2[0])) break; chmin(lstlen[i], pf[i] - pf[stk2[0]]); stk2.pop_front(); } stk1 = stk2; deque<int>().swap(stk2); continue; } while (stk1.size()) { if (pf[i] < getb(stk1[0])) break; chmin(lstlen[i], pf[i] - pf[stk1[0]]); stk1.pop_front(); } } cout << dp[n] << '\n'; }

Compilation message (stderr)

segments.cpp: In function 'int32_t main()':
segments.cpp:35:7: warning: variable 'valid' set but not used [-Wunused-but-set-variable]
   35 |  auto valid = [&](int l, int r, int i) {
      |       ^~~~~
#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...