제출 #589723

#제출 시각아이디문제언어결과실행 시간메모리
589723Mamedov금 캐기 (IZhO14_divide)C++17
100 / 100
41 ms6348 KiB
#pragma GCC optimize ("O3") #include <bits/stdc++.h> #define pii pair<int, int> #define piii pair<pii, int> #define vi vector<int> #define vvi vector<vi> #define vpii vector<pii> #define vvpii vector<vpii> #define f first #define s second #define oo 1000000001 #define eb emplace_back #define pb push_back #define mpr make_pair #define size(v) (int)v.size() #define ln '\n' #define ull unsigned long long #define ll long long #define all(v) v.begin(), v.end() using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); struct miningCamp { int x, g; ll d; bool operator < (const miningCamp &camp) const { return x < camp.x; } }; void solve() { int n; cin >> n; vector<miningCamp>camps(n + 1); for (int i = 1; i <= n; ++i) { cin >> camps[i].x >> camps[i].g >> camps[i].d; } sort(camps.begin() + 1, camps.end()); camps[0].d = 0; for (int i = 1; i <= n; ++i) { camps[i].d += camps[i - 1].d; } vector<ll>diffMax(n + 1, 0); vector<ll>sumGold(n + 1, 0); for (int i = n; i >= 1; --i) { diffMax[i] = camps[i].d - camps[i].x; if (i < n) diffMax[i] = max(diffMax[i], diffMax[i + 1]); } for (int i = 1; i <= n; ++i) { sumGold[i] = sumGold[i - 1] + camps[i].g; } ll res = 0; for (int i = 1; i <= n; ++i) { ll val = camps[i - 1].d - camps[i].x; int l = i, r = n; int mid; while (l < r) { mid = (l + r + 1) >> 1; if (diffMax[mid] >= val) { l = mid; } else { r = mid - 1; } } res = max(res, sumGold[l] - sumGold[i - 1]); } cout << res << ln; } int main() { ios_base::sync_with_stdio(false); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...