方法一:暴力(可以过9/10个数据)
#include<iostream>
using namespace std;
const int N = 100010;
int n;
int a[N];
int main()
{
cin>>n;
for(int i = 0;i<n;i++) cin>>a[i];
for(int i = 0;i<n;i++)
{
int sign = 0;
for(int j = i-1;j>=0;j--)
{
if(a[j]<a[i])
{
sign = 1;
cout<<a[j]<<' ';
break;
}
}
if(sign == 0) cout<<-1<<' ';
}
return 0;
}
方法二:优化方法一(可以过9/10个数据)
#include<iostream>
using namespace std;
const int N = 100010;
int n;
int a[N];
int main()
{
cin>>n;
for(int i = 0;i<n;i++) cin>>a[i];
for(int i = 0;i<n;i++)
{
int sign = 0;
int j = i;
while(j--)
if(a[j]<a[i])
{
sign = 1;
cout<<a[j]<<' ';
break;
}
if(sign == 0) cout<<-1<<' ';
}
return 0;
}
方法三:单调栈
#include<iostream>
using namespace std;
const int N = 100010;
int n;
int stk[N],tt;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
while(tt && stk[tt]>=x) tt--;
if(tt) cout<<stk[tt]<<' ';
else cout<<-1<<' ';
stk[++tt] = x;
}
return 0;
}