12143. Кольоровий зсув
Відправити розв'язок
Бали:
100
Time limit:
2.0s
Memory limit:
500M
Authors:
Problem type
Allowed languages
C++, Java, Pascal, Python
Вам надається рядок \(S\) довжиною \(N\), що складається з малих літер англійського алфавіту. Кожен символ \(S\) пофарбовано в один із \(M\) кольорів: колір 1, колір 2, ..., колір \(M\); для кожного \(i=1,2,…,N\) \(i\)-й символ \(S\) фарбується кольором \(C_i\) .
Для кожного \(i=1,2,…,M\) у цьому порядку виконаємо наступну операцію.
- Виконайте круговий зсув вправо на 1 на частині \(S\), пофарбованій кольором \(i\). Тобто, якщо \(p_1, p_2, p_3, …, p_k\) символи зафарбовані кольором \(i\), то одночасно замінити \(p_1, p_2, p_3, …, p_k\) символи \(S\) на \(p_k, p_1, p_2, …, p_{k−1} символи з \)S~ відповідно.
Виведіть кінцеву \(S\) після наведених вище операцій. Обмеження гарантують, що принаймні один символ \(S\) буде пофарбовано в кожен із \(M\) кольорів.
Обмеження
- \(1≤M≤N≤2×10^5\)
- \(1≤C_i ≤M\)
- \(N\), \(M\) і \(C_i\) — цілі числа.
- \(S\) — рядок довжиною \(N\), що складається з малих літер англійського алфавіту.
- Для кожного цілого числа \(1≤i≤M\) існує таке ціле число \(1≤j≤N\), що \(C_j =i\).
Формат вхідних даних
Перший рядок містить цілі числа \(N,M\).
Другий рядок містить \(S\).
Наступний рядок містить цілі числа \(C_i\).
Формат вихідних даних
У вихідний потік виведіть відповідь.
Приклад вхідних даних
8 3
apzbqrcs
1 2 3 1 2 2 1 2
Приклад вихідних даних
cszapqbr
Спочатку \(S= apzbqrcs\).
- Для \(i=1\) виконайте круговий зсув праворуч на 1 на частині \(S\), утвореній 1-м, 4-м, 7-м символами, в результаті чого \(S= cpzaqrbs\).
- Для \(i=2\) виконайте круговий зсув праворуч на 1 на частині \(S\), утвореній 2-м, 5-м, 6-м, 8-м символами, в результаті чого \(S= cszapqbr\).
- Для \(i=3\) виконайте круговий зсув праворуч на 1 на частині \(S\), утвореній 3-м символом, в результаті чого \(S= cszapqbr\) (тут \(S\) не змінюється).
Таким чином, ви повинні вивести \(cszapqbr\).
Приклад вхідних даних
2 1
aa
1 1
Приклад вихідних даних
aa
Коментарі