Submission #1309876

#TimeUsernameProblemLanguageResultExecution timeMemory
1309876khoadFuel Station (NOI20_fuelstation)C++20
100 / 100
243 ms26264 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define inf32 ((int)1e9 + 7) #define inf64 ((long long)1e18 + 7) #define MASK32(x) (1 << (x)) #define MASK64(x) (1ll << (x)) #define BIT(mask, i) (((mask) >> (i)) & 1) #define all(a) begin(a), end(a) #define isz(a) ((int)a.size()) const int N = 3e5 + 5; long long seg[N << 2], lazy[N << 2]; void down(int id, int l, int r) { seg[id << 1] += lazy[id]; seg[id << 1 | 1] += lazy[id]; lazy[id << 1] += lazy[id]; lazy[id << 1 | 1] += lazy[id]; lazy[id] = 0; } void upd(int id, int l, int r, long long v, int tl, int tr) { if(l <= tl && tr <= r) { seg[id] += v; lazy[id] += v; return; } down(id, l, r); int mid = (tl + tr) >> 1; if(l <= mid) upd(id << 1, l, r, v, tl, mid); if(r > mid) upd(id << 1 | 1, l, r, v, mid + 1, tr); seg[id] = max(seg[id << 1], seg[id << 1 | 1]); } long long get(int id, int l, int r, int tl, int tr) { if(l <= tl && tr <= r) return seg[id]; down(id, l, r); int mid = (tl + tr) >> 1; if(r <= mid) return get(id << 1, l, r, tl, mid); if(l > mid) return get(id << 1 | 1, l, r, mid + 1, tr); return max(get(id << 1, l, r, tl, mid), get(id << 1 | 1, l, r, mid + 1, tr)); } struct Station { long long x, a, b; int i; bool operator<(const Station& rhs) const { return x < rhs.x; } bool operator>(const Station& rhs) const { return b > rhs.b; } } s[N]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, d; cin >> n >> d; for(int i = 1; i <= n; ++i) cin >> s[i].x >> s[i].a >> s[i].b; sort(s + 1, s + n + 1); for(int i = 1; i <= n; ++i) s[i].i = i; sort(s + 1, s + n + 1, greater<Station>()); upd(1, n + 1, n + 1, d, 1, n + 1); long long res = d; for(int i = 1; i <= n; ++i) { upd(1, s[i].i, s[i].i, s[i].x, 1, n + 1); upd(1, s[i].i + 1, n + 1, -s[i].a, 1, n + 1); if(seg[1] <= s[i].b) res = min(res, seg[1]); } cout << res; 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...