思路:
用栈来模拟,能pop就pop,记下一个需要pop的数为temp,那么如果栈非空,栈顶肯定大于temp,那么加入栈 栈顶值-1 到 temp 的值,否则加入栈 n 到 temp 的值,如果需要加入的数之前已经出现过,答案则不存在。
代码:
#includeusing namespace std;#define ll long long#define pb push_back#define meme(a,b) memset(a,b,sizeof(a))const int N=2e5+5;bool vis[N];int a[N];stack s;int main(){ ios::sync_with_stdio(false); cin.tie(0); int n,k; cin>>n>>k; int temp=1; for(int i=1;i<=k;i++){ cin>>a[i]; vis[a[i]]=true; s.push(a[i]); while(s.size()&&s.top()==temp){ s.pop(); temp++; } } while(s.size()&&s.top()>temp||n+1>temp){ int t; if(s.size())t=s.top(); else t=n+1; for(int i=t-1;i>=temp;i--){ if(vis[i]){ cout<<-1<