Runtime Error爆零,救救孩子吧!
查看原帖
Runtime Error爆零,救救孩子吧!
290570
UnderDogStar楼主2020/5/31 20:36

思路就是单调递减栈。

#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#define MaxN 3000010
using namespace std;
typedef long long LL; 
LL nums[MaxN],flag[MaxN],n;
stack <LL> st; 
int main(){
	scanf("%lld",&n);
	for(int i=1; i<=n; i++)
		scanf("%lld",&nums[i]);
	for(int i=1; i<=n; i++){
		if( st.empty() ) st.push(nums[i]);
		else if( st.top() < nums[i] ){
			while( !st.empty() && st.top() < nums[i] ){
				flag[st.top()]=i;
				st.pop();
			}
			st.push(nums[i]);
		}
		else  st.push(nums[i]); 
	} 
	while( !st.empty() ){
		flag[st.top()]=0;
		st.pop();
	}
	for(int i=1; i<=n; i++)
		printf("%lld ",flag[nums[i]]);
	return 0;
} 
2020/5/31 20:36
加载中...