Submission #1074784

#TimeUsernameProblemLanguageResultExecution timeMemory
1074784coolboy19521Weighting stones (IZhO11_stones)C++17
100 / 100
286 ms7796 KiB
#include "bits/stdc++.h"
#define ll long long

using namespace std;

struct STree {
    vector<int> st, lz;
    int sz, n;
    STree(int N): sz(4 * N + 100), n(N) {
        st.assign(sz, 0);
        lz.assign(sz, 0);
    }
    void relax(int v) {
        st[v] += lz[v];
        if (v * 2 < sz)
            lz[v * 2] += lz[v];
        if (v * 2 + 1 < sz)
            lz[v * 2 + 1] += lz[v];
        lz[v] = 0;
    }
    void upd(int lo, int hi, int ix, int v, int k) {
        relax(v);
        if (lo > ix) return;
        if (hi <= ix) {
            lz[v] += k;
            relax(v);
            //cout << "updd: " << lo << ' ' << hi << ' ' << st[v] << '\n';
        } else {
            int mi = (lo + hi) / 2;
            upd(lo, mi, ix, v * 2, k);
            upd(mi + 1, hi, ix, v * 2 + 1, k);
            st[v] = min(st[v * 2], st[v * 2 + 1]);
            //cout << "upd: " << lo << ' ' << hi << ' ' << st[v * 2] << ' ' << st[v * 2 + 1] << '\n';
        }
    }
    int qry(int lo, int hi, int ql, int qr, int v) {
        relax(v);
        if (lo > qr || ql > hi) return 2e5;
        if (ql <= lo && hi <= qr) return st[v];
        int mi = (lo + hi) / 2;
        int lq = qry(lo, mi, ql, qr, v * 2);
        int rq = qry(mi + 1, hi, ql, qr, v * 2 + 1);
        return min(lq, rq);
    }
};

int main() {
    int n;
    cin >> n;

    STree le(n), ri(n);

    for (int i = 0; i < n; i ++) {
        int a, b;
        cin >> a >> b;
        if (1 == b) {
            le.upd(1, n, a, 1, -1);
            ri.upd(1, n, a, 1, 1);
        } else {
            le.upd(1, n, a, 1, 1);
            ri.upd(1, n, a, 1, -1);
        }
        int lq = le.qry(1, n, 1, n, 1), rq = ri.qry(1, n, 1, n, 1);
        //cout << "hi: " << lq << ' ' << rq << ' ' << le.qry(1, n, 5, 5, 1) << '\n';
        if (0 > lq && rq >= 0)
            cout << ">\n";
        else if (0 > rq && lq >= 0)
            cout << "<\n";
        else cout << "?\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...