Submission #558562

#TimeUsernameProblemLanguageResultExecution timeMemory
558562savacskaAnts and Sugar (JOI22_sugar)C++17
6 / 100
4091 ms27376 KiB
#include <bits/stdc++.h> #define pb push_back #define mp make_pair #define x first #define y second using namespace std; typedef long long ll; typedef long double ld; const int MAXQ = 500000; pair <int, pair <int, int> > zapr[MAXQ + 5]; map <int, int> opa; int inv[MAXQ + 5]; ll ants[MAXQ + 5], sugar[MAXQ + 5], cop[MAXQ + 5]; int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); int quer, len; cin >> quer >> len; for (int i = 1; i <= quer; i++) { int typ, x, cnt; cin >> typ >> x >> cnt; zapr[i] = mp(typ, mp(x, cnt)); opa.insert(mp(x, 0)); } int cnt = 0; for (auto it = opa.begin(); it != opa.end(); it++) { cnt++; inv[cnt] = it->x; it->y = cnt; } for (int i = 1; i <= quer; i++) zapr[i].y.x = opa[zapr[i].y.x]; for (int i = 1; i <= quer; i++) { if (zapr[i].x == 1) ants[zapr[i].y.x] += zapr[i].y.y; else sugar[zapr[i].y.x] += zapr[i].y.y; for (int k = 1; k <= cnt; k++) cop[k] = ants[k]; int uk = 1; ll ans = 0; for (int k = 1; k <= cnt; k++) { if (sugar[k] == 0) continue; while (uk <= cnt && (inv[k] - inv[uk] > len || cop[uk] == 0)) uk++; ll ost = sugar[k]; while (uk <= cnt && ost > 0 && (inv[uk] - inv[k]) <= len) { ll tt = min(ost, cop[uk]); ost -= tt; cop[uk] -= tt; ans += tt; if (cop[uk] == 0) uk++; } } cout << ans << '\n'; } 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...