제출 #1367093

#제출 시각아이디문제언어결과실행 시간메모리
1367093Nxmkxing가로등 (APIO19_street_lamps)C++20
20 / 100
121 ms7316 KiB
#include <bits/stdc++.h>
using namespace std;

const int inf = 1e9;

const int N = 3e5 + 10;
int n, q;
string s;
int total[N], start[N];

struct SegmentTree {
    int t[N * 4];
    void init() {
        for (int i = 1; i < n * 4; i++) t[i] = inf;
    }
    void pull(int i) {
        t[i] = max(t[i * 2], t[i * 2 + 1]);
    }
    void update(int i, int b, int e, int x, int v) {
        if (b == e) return void (t[i] = v);
        int mid = (b + e) / 2;
        if (x <= mid) update(i * 2, b, mid, x, v);
        else update(i * 2 + 1, mid + 1, e, x, v);
        pull(i);
    }
    void update(int x, int v) {
        update(1, 1, n, x, v);
    }
    int query(int i, int b, int e, int l, int r) {
        if (r < b || e < l) return -inf;
        if (l <= b && e <= r) return t[i];
        int mid = (b + e) / 2;
        int ql = query(i * 2, b, mid, l, r);
        int qr = query(i * 2 + 1, mid + 1, e, l, r);
        return max(ql, qr);
    }
    int query(int l, int r) {
        return query(1, 1, n, l, r);
    }
}
st;

int main() {
    cin.tie(nullptr)->ios_base::sync_with_stdio(false);
    cin >> n >> q >> s;
    st.init();
    for (int i = 1; i <= n; i++) {
        if (s[i-1] == '1') st.update(i, 0);
    }
    for (int i = 1; i <= q; i++) {
        string type;
        cin >> type;
        if (type == "toggle") {
            int pos;
            cin >> pos;
            st.update(pos, i);
        } 
        else {
            int a, b;
            cin >> a >> b;
            int mx = st.query(a, b - 1);
            cout << max(0, i - mx) << "\n";
        }
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…