답안 #162011

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
162011 2019-11-05T18:19:44 Z DS007 Deda (COCI17_deda) C++14
140 / 140
854 ms 4668 KB
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5;
const int M = 1e9 + 1;
#define child 2 * v;

int t[4 * N];
int n, q;

void update(int v, int tl, int tr, int a, int x) {
    if (a == tl && tl == tr) {
        t[v] = x;
    } else {
        int tm = (tl + tr) / 2;
        if (a <= tm)
            update(v * 2, tl, tm, a, x);
        else
            update(v * 2 + 1, tm + 1, tr, a, x);
        t[v] = min(t[v * 2], t[v * 2 + 1]);
    }
}

int query(int v, int tl, int tr, int l, int r, int y) {
    if (l == tl && r == tr && l == r)
        return l;

    int tm = (tl + tr) / 2, a = -2, b = -2;
    if (t[v * 2] <= y && l <= tm)
        a = query(v * 2, tl, tm, l, min(tm, r), y);
    if (a == -2 && t[v * 2 + 1] <= y && r > tm)
        b = query(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r, y);

    return a == -2 ? b : (b == -2 ? a : min(a, b));
}

int main() {
    fill(t, t + 4 * N, M);
    cin >> n >> q;

    for (int i = 0; i < q; i++) {
        char m;
        int x, a;
        cin >> m >> x >> a;

        if (m == 'M')
            update(1, 0, n - 1, a - 1, x);
        else
            cout << query(1, 0, n - 1, a - 1, n - 1, x) + 1 << "\n";
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 3452 KB Output is correct
2 Correct 6 ms 3448 KB Output is correct
3 Correct 21 ms 3448 KB Output is correct
4 Correct 854 ms 4668 KB Output is correct
5 Correct 691 ms 4216 KB Output is correct
6 Correct 734 ms 4472 KB Output is correct
7 Correct 776 ms 4472 KB Output is correct