TopCoder

User's AC Ratio

100.0% (2/2)

Submission's AC Ratio

50.0% (2/4)

Tags

Description

快取是一小塊記憶體儲存空間,儲存在快取內的資料可以被快速提取,你現在要模擬一個快取的讀寫排程工作。假設記憶體一共有 $N$ 個等大的單位,而你的快取可以儲存 $K$ 單位的資料,並且你可以預先知道未來 $P$ 次程式要讀寫的記憶體單位。

你要依序讀寫 $P$ 單位的資料。快取一開始是空的,每當讀寫的資料不在快取中時,就會從後層的記憶體調閱資料再寫入快取中。如果此時快取已將容量 $K$ 單位存滿,則你要選擇一個單位的資料覆蓋掉,覆蓋掉的資料便視為已經不在快取中。請假設當你從快取外讀入了一單位資料後,你一定會將他寫到快取上。

試圖讀寫不是快取的記憶體是讀寫中相對較花時間的一部分,因此你要最小化這個次數。請求出在最佳讀寫安排下,讀寫資料不在快取中的最少次數。

Input Format

輸入第一行是三個空白分隔的整數 $N, K, P$,分別代表記憶體總單位數,快取容量,以及程式要讀寫的記憶體單位數。
輸入第二行是 $P$ 個空白分隔的整數,代表依序要讀入的記憶體單位位置 $a_i (1\le i\le P)$。

輸入保證 $1\le N, K\le 10^ 5$,$1\le P\le 5\times 10^ 5$,$1\le a_i\le N$。

Output Format

輸出一行一個整數代表最少讀寫資料不在快取的次數。

Sample Input 1

3 2 3
1 2 3

Sample Output 1

3

Sample Input 2

5 1 5
5 3 1 4 2

Sample Output 2

5

Hints

Problem Source

TIOJ

Subtasks

No. Testdata Range Constraints Score
1 0~1 範例測資 0
2 0~12 無額外限制 100

Testdata and Limits

No. Time Limit (ms) Memory Limit (VSS, KiB) Output Limit (KiB) Subtasks
0 2000 524288 65536 1 2
1 2000 524288 65536 1 2
2 2000 524288 65536 2
3 2000 524288 65536 2
4 2000 524288 65536 2
5 2000 524288 65536 2
6 2000 524288 65536 2
7 2000 524288 65536 2
8 2000 524288 65536 2
9 2000 524288 65536 2
10 2000 524288 65536 2
11 2000 524288 65536 2
12 2000 524288 65536 2