DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

Reading KakaoTalk

問題に戻る

解説

각 사람 ppp가 마지막으로 작성한 메시지의 번호를

Lp=max⁡({i∣Ai=p}∪{0})L_p=\max(\{i\mid A_i=p\}\cup\{0\})Lp​=max({i∣Ai​=p}∪{0})

라고 하자. 작성자 조건은 Cp≥LpC_p\ge L_pCp​≥Lp​와 같다.

편의를 위해 B0=NB_0=NB0​=N, BM+1=0B_{M+1}=0BM+1​=0으로 둔다. 정확히 번 메시지까지 읽은 사람의 수를 라고 하면

Dk=Bk−Bk+1(0≤k≤M)D_k=B_k-B_{k+1}\qquad(0\le k\le M)Dk​=Bk​−B

이다. 입력에서 BBB가 비증가 수열임이 보장되므로 모든 DkD_kDk​는 음이 아닌 정수이다.

EkE_kEk​를 Lp≤kL_p\le kLp​≤k인 사람의 수라고 하자. Cp=kC_p=k가 되려면 반드시 여야 한다.

k=0,1,⋯ ,Mk=0,1,\cdots,Mk=0,1,⋯,M 순서로 Cp=kC_p=kCp​=k인 사람을 정한다. 보다 작은 값을 이미 받은 사람은 정확히

N−BkN-B_kN−Bk​

명이다. 이들은 모두 Lp≤kL_p\le kLp​≤k를 만족한다. 따라서 아직 값을 받지 않았고 Cp=kC_p=kCp​=k가 될 수 있는 사람은

Ek−(N−Bk)E_k-(N-B_k)Ek​−(N−Bk​)

명이다.

이 중 정확히 DkD_kDk​명을 고르면 된다. 따라서 답은

∏k=0M(Ek−(N−Bk)Dk)\prod_{k=0}^{M}\binom{E_k-(N-B_k)}{D_k}k=0∏M​(D

이다. 문제에서 유효한 수열이 하나 이상 존재한다고 보장하므로 모든 단계의 선택은 가능하다. 구현에서는 조합의 위쪽 값이 DkD_kDk​보다 작거나 음수인지 확인해도 된다.

각 사람의 LpL_pLp​를 구한 뒤, LpL_pLp​의 빈도에 대한 누적합으로 모든 EkE_kE를 구할 수 있다. 팩토리얼과 역팩토리얼을 전처리하면 각 조합을 에 계산할 수 있다.

시간 복잡도는 O(N+M)O(N+M)O(N+M)이고, 메모리 복잡도는 O(N+M)O(N+M)O(N+M)이다.

kkk
DkD_kDk​
k+1
​
(
0
≤
k≤
M)
Cp​
=
k
Lp≤kL_p\le kLp​≤k
kk
k
k
​
Ek​−(N−Bk​)
​
)
k
​
O(1)O(1)O(1)