본문 바로가기

ps (문제)

백준 24971 262144 revisited

 

문제 링크: https://www.acmicpc.net/problem/24971

 

24971번: 262144 Revisited

There are $\frac{6\cdot 7}{2}=21$ contiguous subsequences in total. For example, the minimum possible final number for the contiguous subsequence $[1,3,1,2,1]$ is $5$, which can be obtained via the following sequence of operations: original -> [1,3,1,2,1]

www.acmicpc.net

백준에 문제를 푼 사람이 3명 밖에 없다! usaco 정풀이랑 본질적으로는 같은데 접근 방식이 조금 다른 것 같아서 글을 써본다.

 

usaco 정풀: http://usaco.org/current/data/sol_prob1_platinum_open22.html

 

예전에 262144 문제를 봐서 그런지 처음에는 dp식 접근을 하려고 했다. 하지만 O(N^2)개의 dp 상태를 잡지 않고서는 어떠한 dp를 잡아야 될지 모르겠어서 관찰이나 했다.

 

$N(N+1)/2$개의 경우를 모두 따지기 전에 원래 문제 262144에 대한 다양한 관찰들을 시도했는데, 각 정수마다 리프 노드를 만들어서 두 정수를 합칠 때마다 새로운 노드를 parent로 하는 트리를 만든 뒤에 max(depth+정수)를 구한다던가 $a_l$과 $a_r$ 사이에 두 정수보다 많이 작으면 정수들이 놓여있다면 적당히 큰 수들로 바꿔줄 수 있다는 식으로 생각을 했는데 잘 안 풀렸다.

 

그래서 스위핑 식으로 생각을 하려고 했다.

가장 작은 정수부터 시작해서 점차 합쳐나간다고 생각하자. 가장 작은 정수가 $x$라고 생각하자. $x$와 인접한 정수 $x+k$가 있다고 하자. $k \geq 1$이면 $max(x, x+k)=max(x+1, x+k)$이기 때문에 $x$를 다른 정수와 합쳐서 $x+1$이 되도록 하지 않는다면 $x$를 $x+1$로 바꿔줘도 결과가 똑같다는 것을 알았다.

이로 인해서 $x$ 2개가 연속해서 있으면 $x+1$로 합쳐줘야 된다는 생각도 했고, $x$가 $2k$개 있으면 2개씩 합쳐셔 $x+1$이 $k$개 생기게 된다는 것을 알았다.

따라서 가장 작은 정수부터 생각하면서 합칠 수 있으면 합치고 합칠 수 없으면 1을 키워나가는 방식을 계속 반복하다보면 262144를 풀 수 있다.

 

이제 $N(N+1)/2$개의 경우를 모두 따지는 것에 대해서 생각을 해보자.

각 구간에서 가장 큰 정수가 $y$라고 하면 정수들을 작은 것부터 합쳐서 결국 $y$만 남게 되었을 때 남아있는 $y$의 개수만 중요하다. 그래서 분할정복을 가장 큰 정수를 기준으로 남는 구간들에 대해서 구간의 prefix와 suffix에 대해서 각각 정수들을 합친 뒤 $y$가 몇 개 남는지 세주면 된다. 이를 naive하게 하면 prefix와 suffix의 개수가 $O(N^2)$개가 되어서 안 된다. 따라서 이를 구간의 prefix / suffix에 대해서 $y$가 $k$개 남는 prefix / suffix의 개수를 관리해주면 된다. 분할 정복 과정에서 $y$를 기준으로 남는 구간들을 합친 뒤에 생긴 $y$의 개수가 $m$개 있다면 $y$들을 2개씩 합치고 나서 생기는 $y+1$의 개수는 $m/2$개가 되어서 결국 관리하는 prefix / suffix의 개수는 $O(N)$개로 bound된다. $y$가 $m$개 있으면 최종적으로 생기는 정수는 $y+log_2(m)$ 이하이기 때문에 $O(NlogN)$에 문제를 풀 수 있게 된다.

'ps (문제)' 카테고리의 다른 글

ICPC 2019 Seoul Regional C번 Islands  (0) 2024.03.31
ICPC 2021 Seoul Regional I번 Postman  (0) 2024.03.29
CCO23 day1  (0) 2023.07.24
백준 14421 The Kingdom of JOIOI  (0) 2023.01.20
백준 8987 수족관 3 (KOI 2013 고등부 4)  (0) 2023.01.18