编程题
### 问题描述 你有一台拥有 $n$ 个缓存页面空间的服务器,只有 $1$ 个用户在同时使用。这个用户将会一共给出 $m$ 条页面请求。每条请求用一个整数 $y$ 表示请求了页面 $y$。请你计算出对于 $n \in [0, m]$,使用 LRU 页面置换算法的缺页中断次数是多少。 LRU 算法的具体描述为:每次当需要访问一个页面的时候,假设当前用户持有 $n_i$ 个缓存空间,首先查询该页面是否存在 $n_i$ 个缓存页面空间中,若在,则**更新该页面访问时间**并结束;若不存在,则将该页面置入 $n_i$ 个位置的其中一个,并**记录当前访问时间**,并触发一次缺页中断。 置入位置的选择规则如下:如果当前空间中有空的位置(为初始状态,历史未在这个位置插入过任何页面),则选择任意一个空位置插入;否则选择当前在缓存中并且**之前最久**未被访问过的页面(记录的访问时间距离现在最久),在该页面的位置插入新页面。用户的初始缓存页面空间的每个位置均处在初始状态。 ### 输入格式 第一行一个整数,$m$,表示页面请求条数。 接下一行,$m$ 个整数,表示 $m$ 个页面请求的编号。 ### 输出格式 一行,$m+1$ 个整数,表示当缓存大小为 $[0, m]$ 时的答案。 ### 样例输入 ```text 6 1 3 1 2 1 1 ``` ### 样例输出 ```text 6 5 3 3 3 3 3 ``` ### 说明 当缓存大小为 $2$ 时的执行过程如下: 初始:[] 访问:[1] (缺页) 访问:[3, 1] (缺页) 访问:[1, 3] 访问:[2, 1] (缺页) 访问:[1, 2] 访问:[1, 2] 故缺页中断次数为 $3$ 次。 ### 评测数据规模 对于 $30$% 的评测数据,$0 < m \leq 1000$。 对于 $70$% 的评测数据,$0 < m \leq 10^5$。 对于 $100$% 的评测数据,$0 < m, y \leq 10^6$。
查看答案
赣ICP备20007335号-2