题解:本题主要考查单调栈。先构建一个栈,如果比栈顶的数大就a[i]是之前栈顶数的仰望对象,记录它的仰望对象并将原来栈顶的数出栈,反之再将a[i]进栈。
代码如下:
#include<iostream>
using namespace std;
int a[653576],sum[374734];
int n,top=1,i,j;
struct b
{
int num;int v;
}zhan[3645365];
int main()
{
cin>>n;
for(i=1;i<=n;i++)cin>>a[i];
for(i=1;i<=n;i++)
{
while(top>1&&a[i]>zhan[top-1].v)//满足仰望就出栈,并记录
{
sum[zhan[top-1].num ]=i;
top--;
}//不满足仰望就入栈
zhan[top].v=a[i];
zhan[top].num=i;
top++;
}
for(i=1;i<=n;i++)cout<<sum[i]<<endl;
return 0;
}