单调栈(模板题)(c++题解)

题目描述

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

输入格式

第一行输入一个n

第二行输入n个整数

输出格式

n行,每行1个数,表示当前数左边第一个比当前数小的数

样例

样例输入

复制5
3 4 2 7 5

样例输出

复制-1
3
-1
2
2

数据范围与提示

n <= 100000

ai 属于 int

_____________________________________________________________________________

日常发作业题解。 

今天这几篇题解写死我啦!

写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

_____________________________________________________________________________

#include 
using namespace std;
stack a;
int n,m;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
    	scanf("%d",&m);
    	while(!a.empty()&&a.top()>=m){
    		a.pop();
		}
		if(a.empty())printf("-1\n");
		else printf("%d\n",a.top());
		a.push(m);
	}
}

 

你可能感兴趣的:(c++,算法,开发语言)