Submission #470356

#TimeUsernameProblemLanguageResultExecution timeMemory
470356ymmFireworks (APIO16_fireworks)C++17
100 / 100
265 ms73364 KiB
/// /// ♪ Pizza mozzarella rella rella rella... ♪ /// #define _USE_MATH_DEFINES #define FAST ios::sync_with_stdio(false),cin.tie(0); #include <bits/stdc++.h> #define Loop(x, l, r) for(int x = (l); x < (r); ++x) #define LoopR(x, l, r) for(int x = (r)-1; x >= (l); --x) #define all(x) x.begin(), x.end() #define Kill(x) exit((cout << (x) << '\n', 0)) #define YN(flag) ((flag)? "YES": "NO") #define F first #define S second typedef long long ll; typedef unsigned long long ull; typedef std::pair<int,int> pii; typedef std::pair<ll ,ll > pll; using namespace std; const int N = 300'010; vector<pll> A[N]; int n, m; struct obj { priority_queue<ll, vector<ll>, less<ll> > l; priority_queue<ll, vector<ll>, greater<ll>> r; ll w=0; void add(ll x) { if(!l.size()) l.push(0); if(!r.size()) r.push(1e15); ll nl = l.top()+x; ll nr = r.top()+x; l.pop(); l.push(nl); while(r.size()) r.pop(); r.push(nr); } void add(obj& x) { w += x.w; if(l.size() < x.l.size()) l.swap(x.l); if(r.size() < x.r.size()) r.swap(x.r); while(x.l.size()) l.push(x.l.top()), x.l.pop(); while(x.r.size()) r.push(x.r.top()), x.r.pop(); while(l.size() && r.size() && l.top() > r.top()) { auto _l = l.top(), _r = r.top(); l.pop(); r.pop(); l.push(_r); r.push(_l); w += _l - _r; } } }; obj* dfs(int v) { obj* ans = new obj; if(v >= n) {ans->r.push(0); return ans;} for(auto [u, w] : A[v]) { auto x = dfs(u); x->add(w); ans->add(*x); } return ans; } int main() { FAST; cin >> n >> m; Loop(i,1,n+m) { ll v, c; cin >> v >> c; --v; A[v].emplace_back(i,c); } cout << dfs(0)->w; }

Compilation message (stderr)

fireworks.cpp: In member function 'void obj::add(ll)':
fireworks.cpp:38:9: warning: this 'while' clause does not guard... [-Wmisleading-indentation]
   38 |         while(r.size()) r.pop(); r.push(nr);
      |         ^~~~~
fireworks.cpp:38:34: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'while'
   38 |         while(r.size()) r.pop(); r.push(nr);
      |                                  ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...