思路来源
jls%%%
题解
赛后补队友AC的水题可还行
最先出现的单减子序列对应的位置,一定是那些最小值的位置
先把那些放满,剩下的贪心选使字典序最小,就把剩下的从前到后扫一遍从小到大放
代码
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=1e5+10;
int n,p[maxn],low,ans[maxn],front;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&p[i]);
low=p[1],ans[p[1]]=++front;
for(int i=2;i<n;++i)
{
if(p[i]>low)continue;
low=p[i];
ans[p[i]]=++front;
}
for(int i=1;i<=n;++i)
{
if(!ans[i])ans[i]=++front;
printf("%d%c",ans[i],i==n?'\n':' ');
}
return 0;
}