Description
Farmer John's N (1 <= N <= 100,000) cows, conveniently numbered
1..N, are once again standing in a row. Cow i has height H_i (1 <=
H_i <= 1,000,000).
Each cow is looking to her left toward those with higher index
numbers. We say that cow i 'looks up' to cow j if i < j and H_i <
H_j. For each cow i, FJ would like to know the index of the first
cow in line looked up to by cow i.
Note: about 50% of the test data will have N <= 1,000.
Input
* Line 1: A single integer: N
* Lines 2..N+1: Line i+1 contains the single integer: H_i
Output
* Lines 1..N: Line i contains a single integer representing the
smallest index of a cow up to which cow i looks. If no such
cow exists, print 0.
Sample Input
Sample Output
HINT
INPUT DETAILS:
FJ has six cows of heights 3, 2, 6, 1, 1, and 2.
OUTPUT DETAILS:
Cows 1 and 2 both look up to cow 3; cows 4 and 5 both look up to cow 6; and
cows 3 and 6 do not look up to any cow.
可以用单调栈维护
有高的点直接比较大小之后赋值编号
#include<stdio.h>
int a[100001],s[100001],ans[100001],i,top;
int main()
{
int n;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=n;i>=0;i--)
{
while(top&&a[s[top]]<=a[i])
top--;
ans[i]=s[top];
s[++top]=i;
}
for(i=1;i<=n;i++)
printf("%d\n",ans[i]);
}