#ifndef INCLUDED_MAIN #define INCLUDED_MAIN #include __FILE__ int main(){ ll n; cin>>n; vl a(n); rep(i,n) cin>>a[i]; vector lef(n,-1),rig(n,-1); vector dep(n,-1); dep[0]=0; map mp; mp[a[0]]=0; vector mam(n,-1); srep(i,1,n-1) { auto it=mp.lower_bound(a[i]); int succ=(it==mp.end() ? -1 : it->second); int pred=(it==mp.begin() ? -1 : prev(it)->second); int par=-1; if(pred<0) par=succ; else if(succ<0) par=pred; else { par=(dep[pred]>dep[succ] ? pred : succ); } mam[i]=par; dep[i]=dep[par]+1; if(a[i] lefud(n,false),rigud(n,false); queue que; vector childs(n,-1); rep(i,n) { if(rig[i]==-1) rigud[i]=true; if(lef[i]==-1) lefud[i]=true; } rep(i,n) { if(lefud[i]&&rigud[i]) que.push(i); childs[i]=0; } //vout(mam); cout< using namespace std; #define rep(i,n) for(ll i=0;i vector spf; vector freq; void pfdiv(ll x) { while(x!=1) { freq[spf[x]]++; ll p=spf[x]; while(x%p==0) { x/=p; } } } void PrimeFact(ll N) { // spfをセット, globalなvectorが必要; spf.resize(N+1); for (ll i=0; i<=N; i++) spf[i] = i; for (ll i=2; i*i<=N; i++) { if (spf[i]==i) { for (ll j=i*i ; j<=N ; j+=i) { if (spf[j]==j) { spf[j]=i; } } } } } vector Erasieve(ll n) { vector is_prime(n+1, true); is_prime[0] = is_prime[1] = false; for (int i=2;i*i<=n;++i) { if (is_prime[i]) { for (int j=i*i;j<=n;j+=i) is_prime[j] = false; } } vector primes; srep(i,2,n) { if (is_prime[i]) primes.push_back(i); } return primes; } void no() { cout<<"No"<& a) { ll ans=0; for(auto i:a) ans+=i; return ans; } #endif