Submission #1312774

#TimeUsernameProblemLanguageResultExecution timeMemory
1312774penguin133Weighting stones (IZhO11_stones)C++20
100 / 100
125 ms9968 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

struct node{
    int s, e, m, suf, mxs, mns;
    node *l, *r;
    node (int _s, int _e) {
        s = _s, e = _e, m = (s + e) >> 1;
        if (s != e) {
            l = new node(s, m);
            r = new node(m + 1, e);
        }
        suf = mxs = mns = 0;
    }

    void upd(int p, int v){
        if (s == e) {
            suf = mxs = mns = v;
            return;
        }
        if (p <= m) l->upd(p, v);
        else r->upd(p, v);
        suf = l->suf + r->suf;
        mxs = max(r->mxs, r->suf + l->mxs);
        mns = min(r->mns, r->suf + l->mns);
    }
}*root;

int main() {
    int n; cin >> n;
    root = new node(1, n);
    for (int i = 1; i <= n; i++) {
        int a, b; cin >> a >> b;
        if (b == 1) root->upd(a, 1);
        else root->upd(a, -1);
        if (root->mns >= 0) cout << ">\n";
        else if (root->mxs <= 0) cout << "<\n";
        else cout << "?\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...