Submission #477547

#TimeUsernameProblemLanguageResultExecution timeMemory
477547cheissmartTwo Dishes (JOI19_dishes)C++14
0 / 100
475 ms50184 KiB
#include <bits/stdc++.h> #define IO_OP std::ios::sync_with_stdio(0); std::cin.tie(0); #define F first #define S second #define V vector #define PB push_back #define MP make_pair #define EB emplace_back #define ALL(v) (v).begin(), (v).end() using namespace std; typedef long long ll; typedef pair<int, int> pi; typedef V<int> vi; string _reset = "\u001b[0m", _yellow = "\u001b[33m", _bold = "\u001b[1m"; void DBG() { cerr << "]" << _reset << endl; } template<class H, class...T> void DBG(H h, T ...t) { cerr << to_string(h); if(sizeof ...(t)) cerr << ", "; DBG(t...); } #ifdef CHEISSMART #define debug(...) cerr << _yellow << _bold << "Line(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__) #else #define debug(...) #endif const int INF = 1e9 + 7, N = 1e6 + 7; int p[N], q[N]; ll a[N], b[N], s[N], t[N]; V<pi> G[N]; signed main() { IO_OP; int n, m; cin >> n >> m; for(int i = 1; i <= n; i++) { cin >> a[i] >> s[i] >> p[i]; a[i] += a[i - 1]; } for(int i = 1; i <= m; i++) { cin >> b[i] >> t[i] >> q[i]; b[i] += b[i - 1]; } ll ans = 0; for(int i = 1; i <= n; i++) { /* a[i] + b[j] <= s[i] b[j] <= s[i] - a[i] */ int j = int(upper_bound(b, b + m + 1, s[i] - a[i]) - b); if(!j) continue; // if(i-th a before j-th b) ans += p[i] G[i].EB(j, p[i]); } for(int j = 1; j <= m; j++) { /* a[i] + b[j] <= t[j] a[i] <= t[j] - b[j] */ int i = int(upper_bound(a, a + n + 1, t[j] - b[j]) - a); if(!i) continue; // original: if(j-th b before i-th a) ans += q[j] ans += q[j]; // final: if(i-th a before j-th b) ans += -q[j] G[i].EB(j, -q[j]); } map<int, ll> mp; for(int i = 1; i <= n; i++) { sort(ALL(G[i]), greater<pi>()); for(auto [j, v] : G[i]) { // 1 ~ j - 1 add v ans += v; if(j > m) continue; mp[j] -= v; if(mp[j] < 0) { auto it = mp.find(j); while(it -> S < 0) { it++; if(it != mp.end()) { mp[it -> F] += mp[prev(it) -> F]; mp.erase(prev(it)); } else { mp.erase(prev(it)); break; } } } } } for(auto [x, y]:mp) { ans += y; assert(y >= 0); } cout << ans << '\n'; }

Compilation message (stderr)

dishes.cpp: In function 'int main()':
dishes.cpp:76:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   76 |   for(auto [j, v] : G[i]) {
      |            ^
dishes.cpp:96:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   96 |  for(auto [x, y]:mp) {
      |           ^
#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...