第一遍笨方法模拟过的
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=1e6+5;
struct P
{
int x;
int s;
}p[maxn];
int main()
{
memset(p,0,sizeof(p));
int n;
scanf("%d",&n);
int k;
int l=n,m=n;
for(int i=1;i<=n;i++)
{
scanf("%d",&k);
p[k].x=1;
int j;
for(j=m;j>=0;j--)
{
if(!(p[j].x==1 && p[j].s==0))
{
l=j+1;
break;
}
}
for(int j=m;j>=l;j--)
{
if(j==m)
printf("%d",j);
else
printf(" %d",j);
p[j].s=1;
}
m=l-1;
printf("\n");
}
return 0;
}
简单点的方法,每次把输入的数存在数组里,下标为1,输出之前所有为1的。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=1e6+5;
int a[maxn];
int main()
{
memset(a,0,sizeof(a));
int n,x,l,k;
scanf("%d",&n);
l=n;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
a[x]=1;
k=0;
for(;a[l];l--)
{
if(!k)
printf("%d",l);
else
printf(" %d",l);
k++;
}
printf("\n");
}
return 0;
}
PS:CF=智商,T^T