标签:class mat include http 单调栈 printf its math 范围
传送门
给定一个长度为\(N\)的整数数列,输出每个数\(A_{i}\)左边第一个比它小的数,如果不存在则输出\(-1\)。
\(1\leq N\leq 10^{5}\)
\(1\leq A_{i} \leq 10^{9}\)
栈中存的数是单调上升的,因为后加入的数永远比前加入的数靠后,所以在新加入数的时候只会先考虑后加入的,
对于每一个数将栈中所有大于它的出栈后剩下的就是左边第一个小于它的
只有前面的数比后加入的小才会被考虑到,所以栈中只会存单调上升的序列
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
const int N=1e5+10;
int n;
int stk[N],cnt;
int main(){
scanf("%d",&n);
rep(i,0,n){
int x;scanf("%d",&x);
while(cnt && stk[cnt] >=x) cnt--;
if(cnt) printf("%d\n",stk[cnt]);
else puts("-1");
stk[++cnt]=x;
}
}
标签:class mat include http 单调栈 printf its math 范围
原文地址:https://www.cnblogs.com/hhyx/p/13284132.html