51nod 2500单调栈后面第一个大于
Posted SSL_ZZL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod 2500单调栈后面第一个大于相关的知识,希望对你有一定的参考价值。
题目
输入样例
8
73 74 75 71 69 72 76 73
输出样例
1 1 4 2 1 1 0 0
解题思路
就是一个单调栈的模板题
从后往前建立一个递减的单调栈
每次到一个新数时,将前面的比当前数小的数弹出,留下的栈顶就是后面第一个比当前数大的数
Code
#include <bits/stdc++.h>
#define N 3000010
#define ll long long
using namespace std;
ll n, top, a[N], q[N], ans[N];
int main()
scanf("%lld", &n);
for(int i = 1; i <= n; i ++)
scanf("%lld", &a[i]);
q[++ top] = n;
for(int i = n - 1; i; i --)
while(top && a[q[top]] <= a[i]) top --;
if(top) ans[i] = q[top] - i;
q[++ top] = i;
for(int i = 1; i <= n; i ++)
printf("%lld ", ans[i]);
以上是关于51nod 2500单调栈后面第一个大于的主要内容,如果未能解决你的问题,请参考以下文章