-
[ABC038 C] 単調増加문제 풀이/AtCoder 2023. 1. 30. 16:35
난이도: 894 // 실험적
번역
더보기 개의 정수가 주어집니다. 번째 수는 입니다. 이면서 이 증가수열이 되도록 하는 의 개수를 찾으세요.즉,
인 모든 에 대해 를 만족시키는 의 개수를 찾으세요.태그
더보기- Sweeping (스위핑)
풀이
1.
을 고정시킬 때, 가능한 개수는?더보기조건의 특성상,
이고 가 증가수열이었다면, 도 증가수열이 됩니다.또한,
이고 이 증가수열이 아니라면, 도 증가수열이 아니게 됩니다.이제,
을 에서부터 시작해서 오른쪽으로 한 칸씩 이동해봅시다.그럼,
은 을 만나게 되거나, 번째 수까지 이동하게 됩니다. 이 멈추게 되면, 어떤 특정한 에 대해 증가수열을 만들게 되는 의 끝점을 알게 되고,시작점은 자명히
일테니, 가능한 경우는 가지가 됨을 알 수 있습니다.2. 더 빠르게 구해보기
더보기(1번)의 방식대로만 돌리면,
의 시간이 나오게 됩니다.하지만,
을 부터 한 칸씩 왼쪽으로 이동시키면, 이로 인한 의 위치는 아래 둘 중 하나로 고정됩니다. : 의 위치에 변함이 없습니다. 다음의 비교는 에서 한 비교와 동일할테니까요. : 의 끝점이 로 이동합니다. 첫 비교부터 증가수열이 아니라는 결론이 나왔으니까요.
다르게 말하자면,
을 에서부터 왼쪽으로 이동시키면, 새로운 의 위치를 에 계산할 수 있게 됩니다.코드
'문제 풀이 > AtCoder' 카테고리의 다른 글
[ABC006 D] トランプ挿入ソート (0) 2023.01.30 [ABC213 E] Stronger Takahashi (0) 2023.01.30 [ABC226 C] Martial artist (0) 2023.01.30 [AGC030 A] Poisonous Cookies (0) 2023.01.30 [ARC119 A] 119 × 2^23 + 1 (0) 2023.01.30