Submission #1002246

#TimeUsernameProblemLanguageResultExecution timeMemory
1002246WhisperFuel Station (NOI20_fuelstation)C++17
100 / 100
316 ms35312 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define int long long #define FOR(i, a, b) for (int i = (a); i <= (b); i++) #define FORD(i, a, b) for (int i = (b); i >= (a); i --) #define REP(i, n) for (int i = 0; i < (n); ++i) #define REPD(i, n) for (int i = (n) - 1; i >= 0; --i) #define MASK(i) (1LL << (i)) #define BIT(x, i) (((x) >> (i)) & 1) constexpr ll LINF = (1ll << 60); constexpr int INF = (1ll << 30); constexpr int Mod = 1e9 + 7; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); /* Phu Trong from Nguyen Tat Thanh High School for gifted student */ template <class X, class Y> bool minimize(X &x, const Y &y){ X eps = 1e-9; if (x > y + eps) {x = y; return 1;} return 0; } template <class X, class Y> bool maximize(X &x, const Y &y){ X eps = 1e-9; if (x + eps < y) {x = y; return 1;} return 0; } int N, K; #define MAX 300005 struct Event{ int X, A, B; Event(){} Event(int _X, int _A, int _B): X(_X), A(_A), B(_B){} bool operator < (const Event& oth) const{ return B > oth.B; } } A[MAX]; template <class T = vector<int>> T unique(T v){ sort(v.begin(), v.end()); v.resize(unique(v.begin(), v.end()) - v.begin()); return v; } template <class T = int> T find(T x, const vector<T>& v){ return upper_bound(v.begin(), v.end(), x) - v.begin(); } template <class T = int> struct SegmentTree{ int n; vector<T> st, lz; SegmentTree(int _n){ this -> n = _n; st.resize((n << 2) + 5); lz.resize((n << 2) + 5); } void pushDown(int id){ if (!lz[id]) return; st[id << 1] += lz[id]; st[id << 1 | 1] += lz[id]; lz[id << 1] += lz[id]; lz[id << 1 | 1] += lz[id]; lz[id] = 0; } void upd(int id, int l, int r, int u, int v, T val){ if (u > r || v < l) return; if (u <= l && v >= r){ st[id] += val; lz[id] += val; return; } int m = (l + r) >> 1; pushDown(id); upd(id << 1, l, m, u, v, val); upd(id << 1 | 1, m + 1, r, u, v, val); st[id] = min(st[id << 1], st[id << 1 | 1]); } void upd(int l, int r, T val){ upd(1, 0, n, l, r, val); } }; void process(void){ cin >> N >> K; vector<Event> event; vector<int> pos; for (int i = 1; i <= N; ++i){ int x, a, b; cin >> x >> a >> b; event.push_back(Event(x, a, b)); pos.push_back(x); } event.push_back(Event(K, 0, 0)); pos.push_back(0); pos.push_back(K); pos = unique(pos); N = (int)pos.size(); SegmentTree<int> st(N); for (int i = 0; i < N; ++i){ st.upd(i, i, -pos[i]); } sort(event.begin(), event.end()); int ans = K; for (auto&x : event){ int p = find(x.X, pos); st.upd(p, N, x.A); if (abs(st.st[1]) <= x.B){ minimize(ans, abs(st.st[1])); } } cout << ans; } signed main(){ #define name "Whisper" cin.tie(nullptr) -> sync_with_stdio(false); //freopen(name".inp", "r", stdin); //freopen(name".out", "w", stdout); process(); }
#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...