Submission #1128458

#TimeUsernameProblemLanguageResultExecution timeMemory
1128458delwar_03_Candies (JOI18_candies)C++20
100 / 100
107 ms11340 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; template <typename T> using o_set = tree<T, null_type, std::less<T>, rb_tree_tag, tree_order_statistics_node_update>; #define int long long #define endl '\n' #define F first #define S second #define pii pair<int, int> #define sz(x) (int) x.size() using namespace std; const int mod = 1e9 + 7; const int N = 2e5 + 10; const int INF = 1e15 + 10; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); void solve() { int n; cin>>n; vector<int> v(n); for(auto &x : v) cin>>x; // for(auto it : v) cerr<<it<<" "; cerr<<endl; vector<int> lf(n), rt(n); for(int i = 0; i < n; i++) { lf[i] = i - 1; rt[i] = i + 1; } priority_queue<pii> pq; for(int i = 0; i < n; i++) pq.push({v[i], i}); vector<int> del(n); int sm = 0; for(int j = 0; j < (n + 1) / 2; j++) { while(del[pq.top().S]) pq.pop(); assert(sz(pq)); auto [x, i] = pq.top(); pq.pop(); sm += x; cout<<sm<<endl; v[i] = -x + (lf[i] >= 0 ? v[lf[i]] : -INF) + (rt[i] < n ? v[rt[i]] : -INF); pq.push({v[i], i}); if(lf[i] >= 0) { del[lf[i]] = 1; lf[i] = lf[lf[i]]; if(lf[i] >= 0) rt[lf[i]] = i; } if(rt[i] < n) { del[rt[i]] = 1; rt[i] = rt[rt[i]]; if(rt[i] < n) lf[rt[i]] = i; } } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int t = 1, c = 1; //cin>>t; while(t--) { // cerr<<"Case "<<c++<<": \n"; solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...