int A[N], par[N];
stack<int> 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();