公式
D - LR insertion 解説
by
D - LR insertion 解説
by
sugarrr
操作を逆から考えると、以下のようになります。
はじめ \(A=(N)\) である。
\(i=N,N-1,\ldots,1\) の順に次の操作を行う。
- \(s_i\) が
L
ならば、\(A\) の末尾に \(i-1\) を挿入する。- \(s_i\) が
R
ならば、\(A\) の先頭に \(i-1\) を挿入する。
これは両端キューなどを用いて実装できます。
計算量は \(O(N)\) です。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
signed main(){
ll n;string s;
cin>>n>>s;
deque<ll>a={n};
for(ll i=n-1;i>=0;i--){
if(s[i]=='L')a.push_back(i);
else a.push_front(i);
}
for(ll i=0;i<=n;i++){
if(i<n)cout<<a[i]<<" ";
else cout<<a[i]<<endl;
}
return 0;
}
投稿日時:
最終更新: