给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。

输入格式
第一行包含整数N,表示数列长度。

第二行包含N个整数,表示整数数列。

输出格式
共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。

数据范围
1≤N≤10^5
1≤数列中元素≤10^9
输入样例:
5
3 4 2 7 5
输出样例:
-1 3 -1 2 2

#include<iostream>
using namespace std;
const int  N=1e6+10;
int stk[N],tt;
int main()
{
    int n;
    cin>>n;
  for(int i=0;i<n;i++)
  {
      int x;
      cin>>x;
      while(tt&&stk[tt]>=x)//tt是不空的,且栈顶stk[tt]永远比x大
      tt--;//删掉栈顶 当a3>a5  a3永远不会被输出,所以删除!
      if(tt) cout<<stk[tt]<<" ";
      else cout<<"-1"<<" ";
      stk[++tt]=x;//把新加的x插入进去
  }
    
    return 0;
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐