BOJ 27536 - Stone Arranging 2

image.png

스택의 관점에서 보면 현재 인덱스가 i라면 a[i]가 마지막으로 나오는 데(j)까지 모두 a[i]로 칠해줘도 된다. 이후에 i를 j + 1 로만들어준다.

void solve() {
   int n;
   cin >> n;
   vi a(n);
   fv(a);
   vi ans = a;
   map<int, vi> idx;
   for (int i = 0; i < n; i++) idx[a[i]].pb(i);

   for (int i = 0; i < n;) {
      for (int j = i; j <= idx[a[i]].back(); j++) {
         ans[j] = a[i];
      }
      i = idx[a[i]].back() + 1;
   }
   for(int i: ans) cout << i << endl;
}

Tags:

Categories:

Updated:

Comments