#include using namespace std; typedef long long ll; typedef pair pll; #define For(i, a, n) for(ll i=a;i pairoperator+(const pair&a, const pair&b){ return {a.first + b.first, a.second + b.second}; } template ostream&operator<<(ostream&os, const pair&p){ return os<<"("< basic_ostream&operator<<(basic_ostream&os, const C&c){ for(auto i=begin(c);i!=end(c);++i){ os<<(i==begin(c)?"":" ")<<*i; } return os; } template void dbg(Args&&... args){ ((cerr< in, mxp, mxs, mnp, mns, l, r; ll n; void update(ll s){ in[s] = in[s*2] + in[s*2 + 1]; mxp[s] = max(mxp[s*2], in[s*2] + mxp[s*2 + 1]); mxs[s] = max(mxs[s*2 + 1], in[s*2 + 1] + mxs[s*2]); mnp[s] = min(mnp[s*2], in[s*2] + mnp[s*2 + 1]); mns[s] = min(mns[s*2 + 1], in[s*2 + 1] + mns[s*2]); return; } public: llervalac(ll vel){ n = 1; while(n < vel) n*=2; in.resize(2*n); l.resize(2*n); r.resize(2*n); mxp.resize(2*n); mxs.resize(2*n), mnp.resize(2*n); mns.resize(2*n); For(i, 0, n){ l[i+n] = r[i+n] = i; in[i+n] = 1; mxp[i+n] = mxs[i+n] = mnp[i+n] = mns[i+n] = 1; } for(ll i = n-1; i >= 1; i--){ l[i] = l[i*2]; r[i] = r[i*2 + 1]; update(i); } } void zmen(ll a, ll b){ a += n; in[a] = mxp[a] = mnp[a] = mxs[a] = mns[a] = b; a/=2; while(a){ update(a); a/=2; } return; } pll dajpref_max(ll a, ll b, ll s = 1){ if(a > r[s] || b < l[s]) return {0, 0}; if(a <= l[s] && r[s] <= b){ return {mxp[s], in[s]}; } pll h1 = dajpref_max(a, b, s*2); pll h2 = dajpref_max(a, b, s*2 + 1); ll sum = h1.second + h2.second; ll h3 = max(h1.first, h1.second + h2.first); return {h3, sum}; } pll dajsuf_max(ll a, ll b, ll s = 1){ if(a > r[s] || b < l[s]) return {0, 0}; if(a <= l[s] && r[s] <= b){ return {mxs[s], in[s]}; } pll h1 = dajsuf_max(a, b, s*2); pll h2 = dajsuf_max(a, b, s*2 + 1); ll sum = h1.second + h2.second; ll h3 = max(h2.first, h2.second + h1.first); return {h3, sum}; } pll dajpref_min(ll a, ll b, ll s = 1){ if(a > r[s] || b < l[s]) return {0, 0}; if(a <= l[s] && r[s] <= b){ return {mnp[s], in[s]}; } pll h1 = dajpref_min(a, b, s*2); pll h2 = dajpref_min(a, b, s*2 + 1); ll sum = h1.second + h2.second; ll h3 = min(h1.first, h1.second + h2.first); return {h3, sum}; } pll dajsuf_min(ll a, ll b, ll s = 1){ if(a > r[s] || b < l[s]) return {0, 0}; if(a <= l[s] && r[s] <= b){ return {mns[s], in[s]}; } pll h1 = dajsuf_min(a, b, s*2); pll h2 = dajsuf_min(a, b, s*2 + 1); ll sum = h1.second + h2.second; ll h3 = min(h2.first, h2.second + h1.first); return {h3, sum}; } }; void solve(){ ll n; cin >> n; vec a; For(i, 0, n){ ll x; cin >> x; a.push_back({x, i}); } sort(all(a)); llervalac seg(n); vec p(n, 1); vec odp(n, 0); For(i, 0, n){ ll ind = a[i].second; dbg("ind = ", ind); ll mx1 = -1, mx2 = -1, mx3 = -1, mx4 = -1; if(ind+1 < n && ind > 0){ mx1 = mx2 = 0; if(ind+2 < n) mx1 = seg.dajpref_max(ind+2, n-1).first; mx1 += p[ind+1]; if(ind-2 >= 0) mx2 = seg.dajsuf_max(0, ind-2).first; mx2 += p[ind-1]; } if(ind+2 < n) { mx3 = 0; if(ind + 3 < n) mx3 = seg.dajpref_max(ind+3, n-1).first + p[ind+1]; mx3 += p[ind+2]; } if(ind > 1) { mx4 = 0; if(ind-3 >= 0) mx4 = seg.dajsuf_max(0, ind-3).first + p[ind-1]; mx4 += p[ind-2]; } ll mn1 = 1, mn2 = 1, mn3 = 1, mn4 = 1; if(ind+1 < n && ind > 0){ mn1 = mn2 = 0; if(ind+2 < n) mn1 = seg.dajpref_min(ind+2, n-1).first; mn1 += p[ind+1]; if(ind-2 >= 0) mn2 = seg.dajsuf_min(0, ind-2).first; mn2 += p[ind-1]; } if(ind+2 < n) { mn3 = 0; if(ind + 3 < n) mn3 = seg.dajpref_min(ind+3, n-1).first + p[ind+1]; mn3 += p[ind+2]; } if(ind > 1) { mn4 = 0; if(ind-3 >= 0) mn4 = seg.dajsuf_min(0, ind-3).first + p[ind-1]; mn4 += p[ind-2]; } dbg("mx1-4", mx1+mx2, mx3, mx4); dbg("mn1-4", mn1+mn2, mn3, mn4); ll MX = max(mx1+mx2, max(mx3, mx4)); ll MN = min(mn1+mn2, min(mn3, mn4)); dbg("mx, mn = ", MX, MN); if(MX >= 0 && MN <= 0) odp[ind] = 1; seg.zmen(ind, -1); p[ind] = -1; } For(i, 0, odp.size()) { if(odp[i]) cout << "YES" << " \n"[i == (odp.size()-1)]; else cout << "NO" << " \n"[i == (odp.size()-1)]; } return; } int main(){ cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int t = 1;//cin>>t; while(t--)solve(); }