公式

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;
}

投稿日時:
最終更新: