Submission #1153108

#TimeUsernameProblemLanguageResultExecution timeMemory
1153108tfgsSafety (NOI18_safety)C++17
100 / 100
145 ms20720 KiB
#ifndef LOCAL #include <bits/stdc++.h> #endif using namespace std; #pragma GCC optimize("Ofast,unroll-loops,no-stack-protector") #pragma GCC target("avx2") #define int int64_t const int inf=1e18; #ifdef LOCAL #include "algo/debug.h" #else template <typename... Args> void dummy(Args&&... args){} #define ps dummy #endif #define f first #define s second template<class T> using V = vector<T>; using vi = V<int>; using vb = V<bool>; using vs = V<string>; #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) #define len(x) (int)((x).size()) #define rsz resize #define ins insert #define ft front() #define bk back() #define pb push_back #define lb lower_bound #define ub upper_bound #define ai2 array<int,2> #define ai3 array<int,3> #define ai4 array<int,4> #define ai5 array<int,5> template<class T> int lwb(const V<T>& a, const T& b) { return lb(all(a),b)-begin(a); } template<class T> int upb(const V<T>& a, const T& b) { return ub(all(a),b)-begin(a); } template<class T> bool ckmin(T& a, const T& b) { return a > b ? a=b, true : false; } template<class T> bool ckmax(T& a, const T& b) { return a < b ? a=b, true : false; } #define pct __builtin_popcountll #define ctz __builtin_ctzll #define clz __builtin_clzll constexpr int p2(int x) { return (int)1 << x; } constexpr int bits(int x) { return x == 0 ? 0 : 63-clz(x); } // floor(log2(x)) template<class T>void UNIQUE(V<T>& v) { sort(all(v)); v.erase(unique(all(v)),end(v)); } template<class T,class U>void erase(T& t, const U& u) { auto it = t.find(u); assert(it != end(t)); t.erase(it); } template<class F> struct y_combinator_result { F f; template<class T> explicit y_combinator_result(T &&f): f(std::forward<T>(f)) {} template<class ...Args> decltype(auto) operator()(Args &&...args) { return f(std::ref(*this), std::forward<Args>(args)...); } }; template<class Fun> decltype(auto) yy(Fun &&fun) { return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun)); } template<class T> struct Venice { int shift = 0; multiset<T> s; void ins(int x) { x -= shift; s.ins(x); } void erase(int x) { x -= shift; ::erase(s, x); } T get_min() { return *begin(s) + shift; } T get_max() { return *rbegin(s) + shift; } }; void solve() { int n, h; cin >> n >> h; vi a(n); for (int& i : a) cin >> i; int b = 0; Venice<int> L, R; L.ins(a[0]); R.ins(a[0]); for (int i = 1; i < n; i++) { L.shift -= h; R.shift += h; int l = L.get_max(), r = R.get_min(); if (a[i] > r) { b += a[i] - r; L.ins(r); R.erase(r); R.ins(a[i]); R.ins(a[i]); } else if (a[i] < l) { b += l - a[i]; R.ins(l); L.erase(l); L.ins(a[i]); L.ins(a[i]); } else { L.ins(a[i]); R.ins(a[i]); } } cout << b << '\n'; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); 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...