Submission #574516

#TimeUsernameProblemLanguageResultExecution timeMemory
574516timreizinSafety (NOI18_safety)C++17
100 / 100
73 ms5484 KiB
#pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt") #include <iostream> #include <cmath> #include <iomanip> #include <vector> #include <stack> #include <queue> #include <list> #include <map> #include <vector> #include <bitset> #include <string> #include <algorithm> #include <iterator> #include <unordered_map> #include <unordered_set> #include <sstream> #include <fstream> #include <numeric> #include <tuple> #include <ctime> #include <random> #include <array> #include <cassert> #include <complex> #include <valarray> #include <set> #include <chrono> using namespace std; #define sorti(a) sort((a).begin(), (a).end()); #define reversi(a) reverse((a).begin(), (a).end()); #define yes cout << "Yes\n"; #define no cout << "No\n"; #define ans(a) cout << a << '\n'; #define read(a, n) {(a).resize(n); for (auto &i : a) cin >> i;} //#define int long long using ll = long long; using ld = long double; using ull = unsigned long long; const int INF = 2147483647; const ll LONGINF = 9223372036854775807; const ll MOD = 1e9 + 7; template <class T> void output(T pq, ll add, bool order) { cout << "{ "; if (order) { while (!pq.empty()) { cout << pq.top() + add << ", "; pq.pop(); } } else { vector<ll> nn; while (!pq.empty()) { nn.push_back(pq.top() + add); pq.pop(); } while (!nn.empty()) { cout << nn.back() << ", "; nn.pop_back(); } } cout << "}"; } void solve() { int n; ll h; cin >> n >> h; pair<ll, ll> f{0, 0}; priority_queue<ll> pql; priority_queue<ll, vector<ll>, greater<>> pqr; ll addr = 0, addl = 0; /*ll a; cin >> a; pql.push(a); pqr.push(a);*/ for (int i = 0; i < n; ++i) { ll a; cin >> a; //do min addl -= h; addr += h; //add |x-a| //{{a}, {0, 0}, {a}} ll x = (pql.empty() ? -1e9 - addl : pql.top()) + addl; if (a == x) { pql.push(a - addl); pqr.push(a - addr); } else if (a > x) { pqr.push(a - addr); pqr.push(a - addr); //--f.first; f.second += a; ll x = pqr.top() + addr; pqr.pop(); pql.push(x - addl); //-x+ob=nb f.second -= x; } else { pql.push(a - addl); pql.push(a - addl); //++f.first; f.second -= a; ll x = pql.top() + addl; pql.pop(); pqr.push(x - addr); //x+ob=nb f.second += x; } /*output(pql, addl, 0); cout << ", {" << f.first << ", " << f.second << "}, "; output(pqr, addr, 1); cout << '\n';*/ } ans(f.second) } signed main() { cin.tie(0)->sync_with_stdio(0); int t = 1; //cin >> t; while (t--) solve(); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...