제출 #1229296

#제출 시각아이디문제언어결과실행 시간메모리
1229296marsasgrgBridges (APIO19_bridges)C++20
0 / 100
3094 ms5112 KiB
#include <bits/stdc++.h> using namespace std; struct Virsune { int pradzia, pabaiga; int suma = 0; Virsune *kaire = nullptr, *desine = nullptr; Virsune(int pradzia, int pabaiga) : pradzia(pradzia), pabaiga(pabaiga) { if (pradzia == pabaiga) { return; } int vidurys = (pradzia + pabaiga) / 2; kaire = new Virsune(pradzia, vidurys); desine = new Virsune(vidurys + 1, pabaiga); } [[nodiscard]] int gauti(int pra, int pab) const { if (pra <= pradzia and pabaiga <= pab) { return suma; } else if (pabaiga < pra or pab < pradzia) { return INT_MAX; } else { return min(kaire->gauti(pra, pab), desine->gauti(pra, pab)); } } void pridejimas(int i, int k) { if (pradzia == pabaiga) { if(pradzia == i) { suma += k; } } else { if (i <= kaire->pabaiga) { kaire->pridejimas(i, k); } else { desine->pridejimas(i, k); } suma = min( kaire->suma , desine->suma); } } }; int main() { // node i yra bridge tarp i, i+1 int n, m, q; cin >> n >> m >> q; Virsune medis(0, n-1); for (int i = 0; i < m; i++) { int ui, vi, di; cin >> ui >> vi >> di; medis.pridejimas(ui - 1, di); } // for (int i = 0; i < n - 1; i++) { // cout << medis.gauti(i, i) << " "; // } while (q--) { int t; cin >> t; if (t == 1) { int b, r; cin >> b >> r; b--; medis.pridejimas(b, r- medis.gauti(b, b)); } else { int s, w; cin >> s >> w; s--; int ans = 1; int i = 0; while (medis.gauti(i, s - 1) < w && i < s) { i++; } ans += s - i; i = n - 1; while (medis.gauti(s+1, i) < w && i > s) { i--; } ans += i - s; cout << ans << "\n"; } } }
#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...