单调栈,用大的弹小的,小的的答案就是大的的编号
代码如下:
#include<algorithm>
#include<ctype.h>
#include<cstdio>
#define N 100020
using namespace std;
inline int read(){
int x=0,f=1;char c;
do c=getchar(),f=c=='-'?-1:f; while(!isdigit(c));
do x=(x<<3)+(x<<1)+c-'0',c=getchar(); while(isdigit(c));
return x*f;
}
int n,x,top;
int ans[N];
struct Data{
int k,id;
}s[N];
int main(){
n=read();
for(int i=1;i<=n;i++){
x=read();
while(top && s[top].k<x)
ans[s[top--].id]=i;
s[++top].k=x;
s[top].id=i;
}
for(int i=1;i<=n;i++)
printf("%d\n",ans[i]);
return 0;
}