Submission #1314639

#TimeUsernameProblemLanguageResultExecution timeMemory
1314639michael12Weighting stones (IZhO11_stones)C++20
100 / 100
113 ms6768 KiB
#include<bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define int long long
using namespace std;
const int maxn = 1e6 + 2;
int tree[4 * maxn];
int mx[4 * maxn];
int mn[4 * maxn];
void update(int node, int start, int end, int id, int val){
    if(start == end){
        tree[node] = val;
        mx[node] = val;
        mn[node] = val;
    }
    else{
        int mid = (start + end) / 2;
        if(mid >= id){
            update(2 * node, start, mid, id, val);
        }
        else{
            update(2 * node + 1, mid + 1, end, id, val);
        }
        tree[node] = tree[2 * node] + tree[2 * node + 1];
        mn[node] = min(mn[2 * node] + tree[2 * node + 1], mn[2 * node + 1]);
        mx[node] = max(mx[2 * node] + tree[2 * node + 1], mx[2 * node + 1]);
    }

}
signed main(){
    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
        int x, y;
        cin >> x >> y;
        x--;
        if(y == 1){
            update(1, 0, n - 1, x, 1);
        }
        else{
            update(1, 0, n - 1, x, -1);
        }   
        if(mn[1] >= 0) cout << ">" << endl;
        else if(mx[1] <= 0) cout << "<" << endl;
        else{
            cout << "?" << endl;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...