#include<iostream> using namespace std; #include<vector> #include<stack> void getAns(vector<int>arr,vector<vector<int>> &ans){ stack<int> s; for(int i=0;i<arr.size();i++){ if(!s.empty()){ if(arr[i]>arr[s.top()]){//当前元素大于栈顶元素,直接压入 s.push(i);//注意加的是数组下标 } else if(arr[i]<=arr[s.top()]){//小于栈顶元素,弹出小于等于arr当前元素的 //站内元素并收集答案 while(!s.empty()&&arr[s.top()]>=arr[i]){ int curIndex=s.top(); s.pop();//弹出 ans[curIndex][0]=(s.size()==0)?-1:s.top(); ans[curIndex][1]=i; } s.push(i); } } else{//栈为空,直接压入 s.push(i); } } while(!s.empty()){//打扫战场 int curIndex=s.top(); s.pop();//弹出 ans[curIndex][0]=(s.size()==0)?-1:s.top(); } for(int i=ans.size()-1;i>=0;i--){ if(ans[i][1]!=-1){ if(arr[ans[i][1]]==arr[i]){ ans[i][1]=ans[ans[i][1]][1]; } } } } int main(){ vector<int> arr; int n; cin>>n; for(int i=0;i<n;i++){ int curNum; cin>>curNum; arr.push_back(curNum); } vector<vector<int>> ans(arr.size(),vector<int>(2,-1)); getAns(arr,ans); for(int i=0;i<ans.size();i++){ cout<<ans[i][0]<<" "<<ans[i][1]<<endl; } return 0; }