Submission #1305199

#TimeUsernameProblemLanguageResultExecution timeMemory
1305199dorkikannPotatoes and fertilizers (LMIO19_bulves)C++20
0 / 100
1 ms576 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; const int N = 5e5 + 5; ll T[N]; ll Solve(int n) { multiset<ll> Left, Right; ll level = 0; ll offsetL = 0, offsetR = 0; Left.insert(0); Right.insert(0); if(T[0] < 0) { offsetL += T[0]; offsetR += T[0]; } else offsetR += T[0]; for(int i = 1; i < n; i++) { ll a = 0 - offsetL; ll b = 0 - offsetR; if(Left.empty()) { if(b < *Right.begin()) { level += (*Right.begin() - b); Right.insert(*Right.begin()); } else { if(b <= *(--Right.end())) { Right.insert(b); Right.insert(b); } Left.insert(*Right.begin() + offsetR - offsetL); level += (b - *Right.begin()); Right.erase(Right.begin()); } } else if(Right.empty()) { if(a > *(--Left.end())) { level += (a - *(--Left.end())); Left.insert(*(--Left.end())); } else { if(a >= *Left.begin()) { Left.insert(a); Left.insert(a); } Right.insert(*(--Left.end()) + offsetL - offsetR); level += (*(--Left.end()) - a); Left.erase(--Left.end()); } } else { if(a >= *(--Left.end()) && b <= *Right.begin()) { Left.insert(a); Right.insert(b); } else if(a < *(--Left.end())) { if(a >= *Left.begin()) { Left.insert(a); Left.insert(a); } Right.insert(*(--Left.end()) + offsetL - offsetR); level += (*(--Left.end()) - a); Left.erase(--Left.end()); } else { if(b <= *(--Right.end())) { Right.insert(b); Right.insert(b); } Left.insert(*Right.begin() + offsetR - offsetL); level += (b - *Right.begin()); Right.erase(Right.begin()); } } if(T[i] < 0) { offsetL += T[i]; offsetR += T[i]; } else offsetR += T[i]; } if(Right.empty()) return level; ll val = level; ll slope = 0; ll last = 0; for(auto e : Right) { ll pos = e + offsetR; val += (pos - last) * slope; if(pos >= 0) return val - pos*slope; slope++; last = pos; } return -1; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, a, b; cin >> n; for(int i = 0; i < n; i++) { cin >> a >> b; T[i] = a - b; } cout << Solve(n) << "\n"; return 0; }
#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...