問題
$D$日間に渡ってあるイベントが開催され、$N(=len(member))$ 人が出席します。
参加者 $ member_i(i=1,2,…,N) $ は $ member_i[‘start’] $ 日目から $ member_i[‘end’] $ 日目まで出席する予定です。
各日のa出席者数を出力してください。
[制約]
🔹$ 1 \leqq D \leqq 100000 $
🔹$ 1 \leqq N(=len(member)) \leqq 100000 $
🔹$ 1 \leqq member[‘start’] \leqq member[‘end’] \leqq D $
解き方・ソースコード
累積和を使ってこの問題を解いていきます。
まず、出席者数の前日比を計算します。
次に前日比の累積和を計算することで、各日の出席者数を求めることができます。
累積和で出席者数が求められる理由は、以下の通りです。
🔹1日目の出席者数は1日目の前日比と一致する。
🔹$d(\geqq 2)$ 日目の出席者数は$d-1$日目の出席者数と $d$ 日目の前日比を足した値と一致する。
[Google Colaboratory]
1 | #-------- 入力例1 --------- |
[実行結果(入力例1)]
1日目の参加人数は 1人 2日目の参加人数は 3人 3日目の参加人数は 4人 4日目の参加人数は 3人 5日目の参加人数は 4人 6日目の参加人数は 2人 7日目の参加人数は 1人 8日目の参加人数は 0人
イベントの各日ごとの参加人数をカウントすることができました。