Submission #1078006

#TimeUsernameProblemLanguageResultExecution timeMemory
1078006AcanikolicWeighting stones (IZhO11_stones)C++14
100 / 100
61 ms7576 KiB
#include <bits/stdc++.h> #define int long long #define pb push_back #define F first #define S second using namespace std; const int N = 1e5 + 10; const int mod = 1e9 + 7; const int inf = 1e9; struct Node { int mn,mx; }; Node st[N * 4]; int lazy[N * 4]; void push(int node,int tl,int tr) { st[node].mx += lazy[node]; st[node].mn += lazy[node]; if(tl != tr) { lazy[node * 2] += lazy[node]; lazy[node * 2 + 1] += lazy[node]; } lazy[node] = 0; } void modify(int node,int tl,int tr,int l,int r,int val) { push(node,tl,tr); if(tl > r || tr < l) return; if(tl >= l && tr <= r) { lazy[node] = val; push(node,tl,tr); return; } int mid = (tl + tr) / 2; modify(node * 2,tl,mid,l,r,val); modify(node * 2 + 1,mid + 1,tr,l,r,val); st[node].mn = min(st[node * 2].mn,st[node * 2 + 1].mn); st[node].mx = max(st[node * 2].mx,st[node * 2 + 1].mx); } int getmn(int node,int tl,int tr,int l,int r) { push(node,tl,tr); if(tl > r || tr < l) return inf; if(tl >= l && tr <= r) return st[node].mn; int mid = (tl + tr) / 2; return min(getmn(node * 2,tl,mid,l,r),getmn(node * 2 + 1,mid + 1,tr,l,r)); } int getmx(int node,int tl,int tr,int l,int r) { push(node,tl,tr); if(tl > r || tr < l) return -inf; if(tl >= l && tr <= r) return st[node].mx; int mid = (tl + tr) / 2; return max(getmx(node * 2,tl,mid,l,r),getmx(node * 2 + 1,mid + 1,tr,l,r)); } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; for(int i = 1; i <= n; i++) { int x,y; cin >> x >> y; x = n - x + 1; modify(1,1,n,x,n,(y == 1 ? 1 : -1)); if(getmn(1,1,n,1,n) >= 0) { cout << ">\n"; }else if(getmx(1,1,n,1,n) <= 0) { cout << "<\n"; }else { cout << "?\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...