int A[N], par[N]; stack st; forr(i, n) { int l = -1; while(!st.empty() && A[st.top()] < A[i]) l = st.top(), st.pop(); if(l != -1) par[l] = i; if(!st.empty()) par[i] = st.top(); st.push(i); } while(st.size() != 1) st.pop(); par[st.top()] = st.top();