Submission #1229289

#TimeUsernameProblemLanguageResultExecution timeMemory
1229289marsasgrgBridges (APIO19_bridges)C++20
0 / 100
3093 ms5384 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);
    }
    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(i, n-1) < 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...