Description
约翰的N(1≤N≤100005)头奶牛站成一排,奶牛i的身高是Hi(l≤Hi≤1,000,000).现在,每只奶牛都在向左看齐.对于奶牛i,如果奶牛j满足i<j且Hi<Hj,我们可以说奶牛i可以仰望奶牛j. 求出每只奶牛离她最近的仰望对象.
Input
第1行输入N,之后每行输入一个身高.
Output
共N行,按顺序每行输出一只奶牛的最近仰望对象.如果没有仰望对象,输出0.
Sample Input
6
3
2
6
1
1
2
3
2
6
1
1
2
Sample Output
3
3
0
6
6
3
0
6
6
0
思路:构造倒序单调递减栈即可;
代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,top=0;
int a[100005],st[100005],ans[100005];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=n;i;i--)
{
while(top&&a[st[top]]<=a[i]) top--;
ans[i]=st[top];
st[++top]=i;
}
for(int i=1;i<=n;i++) printf("%d\n",ans[i]);
return 0;
}