아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

구슬 정리

시간 제한2초메모리 제한1024 MB

요약
셀을 하나씩 토글한 뒤, 구슬을 왼쪽 끝이나 오른쪽 끝에 연속으로 모으는 데 필요한 최소 밀기 횟수를 매번 구한다.
난이도

어려움10점 중 8점

유형
누적 합, 정렬, 구현, 수학
정답자
아직 제출이 없습니다

문제

현욱이는 nn개(2≤n≤2⋅1052 \le n \le 2 \cdot 10^5)의 칸으로 이루어진 긴 통을 하나 가지고 있다. 각 칸은 비어 있거나 구슬을 하나 담고 있다. 구슬을 보관할 때 여기저기 흩어져 있으면 보기 좋지 않으므로, 현욱이는 모든 구슬을 한쪽 끝으로 모으려고 한다. 구체적으로, 통에 구슬이 kk개 있다면 구슬은 11번부터 kk번 칸에 있거나 n−k+1n-k+1번부터 nn번 칸에 있어야 한다.

현욱이는 통의 ii번째 칸에 있는 구슬을 살짝 밀어 (i−1)(i-1)번째 칸이나 (i+1)(i+1)번째 칸으로 옮길 수 있다. 옮기려는 방향의 칸에 구슬이 있으면 그 구슬도 같은 방향으로 밀린다. 예를 들어, 2번, 3번, 5번 칸에 구슬이 있다고 하자. 현욱이가 2번 칸의 구슬을 3번 칸 쪽으로 밀면 3번 칸의 구슬도 4번 칸으로 밀린다. 5번 칸의 구슬은 그대로 남는다.

현욱이는 통에 구슬을 넣거나 빼면서 구슬을 모두 정리하는 데 필요한 최소 이동 횟수가 어떻게 변하는지 궁금해한다. 현욱이가 통에 구슬을 넣거나 뺄 때마다 구슬 통을 정리하는 데 필요한 최소 이동 횟수를 계산하는 프로그램을 작성하시오.

입력

첫째 줄에 구슬 통의 길이 n (2≤n≤2⋅105)n\ (2 \le n \le 2 \cdot 10^5)이 주어진다.

둘째 줄에 구슬 통의 상태를 나타내는 O와 X로만 이루어진 길이 nn의 문자열이 주어진다. 문자열의 ii번째 문자가 O이면 그 칸에 구슬이 있다. 그렇지 않으면 ii번째 문자는 X이고 그 칸은 비어 있다.

셋째 줄에 현욱이가 수행하는 행동의 수 q (1≤q≤2⋅105)q\ (1 \le q \le 2 \cdot 10^5)가 주어진다.

다음 qq개의 줄에 각각 현욱이의 행동을 나타내는 정수 k (1≤k≤n)k\ (1 \le k \le n)가 하나씩 주어진다. 이는 구슬 통의 kk번째 칸에 구슬이 있으면 그 구슬을 빼고, 구슬이 없으면 그 칸에 구슬을 넣는다는 뜻이다.

입력은 구슬 통에 구슬이 하나도 없는 상태가 생기지 않도록 주어진다.

출력

현욱이가 처음 ii개의 행동을 수행한 뒤 구슬을 모두 정리하는 데 필요한 최소 이동 횟수를 ii번째 줄에 하나씩, 모두 qq개의 줄에 걸쳐 출력한다.

예제1

  1. 예제 1

    입력
    6
    OXXOXO
    4
    3
    1
    6
    3
    
    예상 출력
    2
    1
    2
    2