单调栈的应用,通过倒序遍历从后往前得出单调递增栈(比当前元素大的元素在栈底,小于等于的出栈),遍历的元素答案即为栈顶元素或0,
#include <stdio.h>
int main(){
int n;
long long arr[3000005];
int ans[3000005];
int p[3000005],top=-1;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&arr[i]);
}
for(int i=n;i>=1;i--){
while(top>=0&&arr[i]>=arr[p[top]]) top--;
if(top==-1){
ans[i]=0;
p[++top]=i;
}else{
ans[i]=p[top];
p[++top]=i;
}
}
for(int i=1;i<=n;i++){
printf("%d ",ans[i]);
}
return 0;
}

京公网安备 11010502036488号