1. 程式人生 > >Codeforces 911E - Stack Sorting

Codeforces 911E - Stack Sorting

blog spa space ++ cout amp while ack sizeof

911E - Stack Sorting

思路:

用棧來模擬,能pop就pop,記下一個需要pop的數為temp,那麽如果棧非空,棧頂肯定大於temp,那麽加入棧 棧頂值-1 到 temp 的值,否則加入棧 n 到 1 的值,如果需要加入的數之前已經出現過,答案則不存在。

代碼:

#include<bits/stdc++.h>
using 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<int>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<<endl; return 0; }
else s.push(i),a[++k]=i,vis[i]=true; } while(s.size()&&s.top()==temp){ s.pop(); temp++; } } if(s.size())cout<<-1<<endl; else for(int i=1;i<=n;i++)cout<<a[i]<< ; cout<<endl; return 0; }

Codeforces 911E - Stack Sorting