luoguP2947 [USACO09MAR] Look Up S

思路

直接单调栈魔板题

code

#include<bits/stdc++.h>
using namespace std;
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define frep(i,x,y) for(int i=x;i>=y;i--)
const int N = 100005;
int n;
stack<int> s;
int a[N];
int f[N];
int main() {
	scanf("%d", &n);
	rep(i, 1, n)
	scanf("%d", &a[i]);
	frep(i, n, 1) {
		while (!s.empty() && a[s.top()] <= a[i]) s.pop();
		if (!s.empty()) f[i] = s.top();
		else f[i] = 0;
		s.push(i);
	}
	rep(i, 1, n) printf("%d\n", f[i]);
	return 0;
}
posted @ 2024-07-24 08:19  mcr130102  阅读(3)  评论(0编辑  收藏  举报
请不要抄袭任何人的博客,这是对一名开发者最基本的尊重。