揭示板题解
各位神犇的实力让我敬佩不已,本蒟蒻也来谈一下这道题的做法(各位大佬轻喷):
首先明确一下思路,这道题我们不必用算法等来做。只需要一些巧妙(投机取巧)的想法。
1.把这n个数倒序存储在数组里,按样例3来看就是10,9,8,7...这样。
2.依次输入m个要提前的数。
3.在2.的同时要顺便把输入的数存到数组的末尾,相当于一个push操作。操作后将该数在原数组中的位置标记,到输出是直接忽略(具体操作见代码)
4.把修改完后的数组倒序输出,就是答案
(不理解的看代码,码风很丑,大佬们见谅)
现在是大家最喜爱的code:
#include<bits/stdc++.h>
using namespace std;
int a[200001],b[100001];//b数组用来检测某个数是否已经输出过
int main()
{
int n,m,k;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
a[i]=n-i+1;//倒序存储
}
for(int i=1;i<=m;i++)
{
cin>>k;
a[++n]=k;//在数组末尾添加这个要提前的数,因为是倒序存储,所以该操作等价于将该数提前
}
for(int i=n;i>=1;i--)
{
if(!b[a[i]])//如果还没有输出过,证明这个数操作最后的位置在当前位置,输出
{
cout<<a[i]<<endl;
b[a[i]]=1;//做好标记
}
else
{
continue;
}
}
return 0;
}