#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 time | Memory | Grader output |
|---|
| Fetching results... |