#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);
}
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 += max(0, s - i);
i = n - 1;
while (medis.gauti(s, i) < w && i > s) {
i--;
}
ans += max(0, i - s);
cout << ans << "\n";
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |