Submission #926341

#TimeUsernameProblemLanguageResultExecution timeMemory
926341TAhmed33Bridges (APIO19_bridges)C++98
0 / 100
683 ms1364 KiB
#include <bits/stdc++.h>
using namespace std;
#define mid ((l + r) >> 1)
#define tl (node + 1)
#define tr (node + 2 * (mid - l + 1))
const int MAXN = 1e5 + 25;
struct SegmentTree {
    int tree[MAXN << 1];
    void update (int l, int r, int a, int b, int node) {
        if (l > a || r < a) return;
        if (l == r) {
            tree[node] = b; return;
        }
        update(l, mid, a, b, tl); update(mid + 1, r, a, b, tr);
        tree[node] = min(tree[tl], tree[tr]);
    }
    int get (int l, int r, int a, int b, int node) {
        if (l > b || r < a) return (int)1e9;
        if (l >= a && r <= b) return tree[node];
        return min(get(l, mid, a, b, tl), get(mid + 1, r, a, b, tr));
    }
} cur;
int main () {
    int n, m;
    cin >> n >> m;
    while (m--) {
        int a, b, c; cin >> a >> b >> c; if (a > b) swap(a, b);
        cur.update(1, n - 1, a, c, 1);
    }
    int q; cin >> q;
    while (q--) {
        int t; cin >> t;
        if (t == 1) {
            int a, b; cin >> a >> b;
            cur.update(1, n, a, b, 1);
        } else {
            int a, b; cin >> a >> b;
            int l = a, r = n - 1, ans = -1; int sum = 1;
            while (l <= r) {
                if (cur.get(1, n - 1, a, mid, 1) < b) {
                    r = mid - 1; 
                } else {
                    ans = mid; l = mid + 1; 
                }
            }
            if (ans != -1) sum += ans - a + 1;
            l = 1, r = a - 1, ans = -1;
            while (l <= r) {
                if (cur.get(1, n - 1, mid, a - 1, 1) < b) {
                    l = mid + 1;
                } else {
                    ans = mid; r = mid - 1;
                }
            }
            if (ans != -1) sum += a - ans;
            cout << sum << '\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...