题解 | #Look Up#

Look Up

https://ac.nowcoder.com/acm/problem/24840

这就是一个单调栈的模板题

首先,先了解什么是单调栈

单调栈:找到数组每个元素左侧最接近它且小于它的数的下标

简单来说:就是向左走,直到找到离他最近的小于它的数的位置

然后,看看模板怎么写

int stk[N];
int tt = 0;
for (int i = 1; i <= n; i ++) {
	while (tt && a[stk[tt]] >= a[i]) tt --;
	ans[i] = stk[tt];
	stk[++tt] = i;
}

最后,写个头文件,套一下公式,然后输出

#include<bits/stdc++.h>
using namespace std;
const int N=3e6+10;//确定一个固定值
int a[N],stk[N],ans[N],tt;
int main() {
	int n;
	scanf("%d",&n);
	for(int i=1; i<=n; i++)scanf("%d",&a[i]);
	for(int i=n; i; i--) {
		while(tt>=1&&a[stk[tt]]<=a[i])tt--;
		ans[i]=stk[tt];
		stk[++tt]=i;
	}
	for(int i=1; i<=n; i++) {//输出结果
		cout<<ans[i]<<endl;
	}
	return 0;
}

全部评论

相关推荐

在等offer的火锅...:我去履历这么好,都找不到工作吗?
点赞 评论 收藏
分享
07-30 13:44
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务