acwing830单调栈

对题目先暴力:
for循环每一点
for从该点往前找到比它小的点


可知:当i<j时,若a[ i ]>a[ j ]时a[ i ]不会是答案(因为后不满足,该前绝对不满足),所以要使序列删掉后不满足,该前绝对不满足 的情况,这样就形成了单调栈
是序列单调递增只样就能保证后面的不满足,前面所有都不确定
#include <bits/stdc++.h>

using namespace std;

const int N=100005;
int n,stk[N],idx,x;

int main() {
	cin>>n;
	idx=0;
	while(n--){
		scanf("%d",&x);
		while(idx&&stk[idx]>=x) idx--;//向前找,直到找到头或者比它小的点 
		if(!idx) printf("-1 ");//如果到头 
		else printf("%d ",stk[idx]);//如果找到比它小的点 
		stk[++idx]=x;//因为它比它滤掉的点都小所以把滤掉的删掉 
	}
	printf("\n");
	return 0;
}

全部评论

相关推荐

渐好:软光栅真的写明白了吗,既然是软渲那技术栈不应该使用OpenGL,光追和bvh既不算什么高级渲染技术更不应该属于软渲的内容,git那个项目没啥用,建议把前两个项目重新组织一下语言,比如软渲染那个项目 冯着色和msaa、贴图这几项分开写,写的到位点,如果你还学过光追那就单独写出来,如果没把握考官问你答不上来就别写给自己找麻烦,在技术栈那一栏简单提一下自己学过就行,这样杂的放在一起不太严谨,个人愚见.
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务