Submission #1244455

#TimeUsernameProblemLanguageResultExecution timeMemory
1244455nguyenkhangninh99Fuel Station (NOI20_fuelstation)C++17
100 / 100
702 ms61660 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int maxn = 3e5 + 5; struct ttt{ int x, a, b; } tram[maxn]; bool cmp(ttt c1, ttt c2){ return c1.x < c2.x; } vector<pair<int, int>> tram2[10005]; int st[4 * maxn], lazy[4 * maxn]; void fix(int id, int l, int r){ if (!lazy[id]) return; st[id] += lazy[id]; if (l != r){ lazy[id*2] += lazy[id]; lazy[id*2+1] += lazy[id]; } lazy[id] = 0; } void update(int id, int l, int r, int u, int v, int val){ fix(id, l, r); if (v < l || r < u) return; if (u <= l && r <= v){ lazy[id] += val; fix(id, l, r); return; } int mid = l+r>>1; update(id*2, l, mid, u, v, val); update(id*2+1, mid+1, r, u, v, val); st[id] = min(st[id*2], st[id*2+1]); } void solve(){ int n, d; cin >> n >> d; int mn = 1e9; for(int i = 1; i <= n; i++){ cin >> tram[i].x >> tram[i].a >> tram[i].b; mn = min(mn, tram[i].b); } tram[++n]={d,0,d}; sort(tram + 1, tram + n + 1, cmp);; vector<int> v, ans(n + 1); map<int, vector<int>> mp; for(int i = 1; i <= n; i++){ v.push_back(tram[i].b); mp[tram[i].b].push_back(i); } sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); for(int i = 1; i <= n; i++){ update(1, 1, n, i, i, v[0] - tram[i].x); int l = i + 1, r = n; while(l <= r){ int mid = (l + r) / 2; if(tram[mid].x > tram[i].x){ ans[i] = mid; r = mid - 1; } else l = mid + 1; } if(ans[i] > 0) update(1, 1, n, ans[i], n, tram[i].a); } int kq = 1e15; int z = st[1]; if(z >= 0) kq = min(kq, v[0] - z); for(int i = 1; i < v.size(); i++){ update(1, 1, n, 1, n, v[i] - v[i - 1]); for(int y: mp[v[i - 1]]){ if(ans[y] > 0) update(1, 1, n, ans[y], n, -tram[y].a); } z = st[1]; if(z >= 0) kq = min(kq, v[i] - z); } cout << kq; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); }
#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...