P12166 [蓝桥杯 2025 省 C/Java A/研究生组] 冷热数据队列
题目描述
冷热数据队列 $q$ 可以看做由两个子队列组成:长度为 $n_1$ 的热数据队列 $q_1$ 和长度为 $n_2$ 的冷数据队列 $q_2$。当我们需要访问某个数据页 $p$ 时:
1. 若 $p$ 不在队列 $q$ 中(即既不在 $q_1$ 中,也不在 $q_2$ 中),则加载数据页 $p$,并插入到 $q_2$ 的首部。
2. 若 $p$ 已经在队列 $q$ 中,则将 $p$ 移动至 $q_1$ 首部。
3. 当 $q_1$ 或 $q_2$ 队列容量不足时,会将其尾部的数据页淘汰出去。
4. 当 $q_1$ 已满,但 $q_2$ 未满时,从 $q_1$ 中淘汰出的数据页会移动到 $q_2$ 首部。
输入格式
输入的第一行包含两个正整数 $n_1, n_2$,用一个空格分隔。
第二行包含一个整数 $m$,表示操作次数。
第三行包含 $m$ 个非负整数 $v_1, v_2, \cdots, v_m$,表示依次访问到的数据页的编号,相邻整数之间使用一个空格分隔。
输出格式
输出两行。
第一行包含若干个整数,相邻整数之间使用一个空格分隔,依次表示 $q_1$ 中的数据页。
第二行包含若干个整数,相邻整数之间使用一个空格分隔,依次表示 $q_2$ 中的数据页。
说明/提示
### 样例说明
| $i$ | $v_i$ | $q_1$ | $q_2$ |
|-------|---------|-----------------|-----------------|
| $- $ | $-$ | $[]$ | $[]$ |
| $1 $ | $1$ | $[]$ | $[1]$ |
| $2 $ | $2$ | $[]$ | $[2,1]$ |
| $3 $ | $3$ | $[]$ | $[3,2,1]$ |
| $4 $ | $4$ | $[]$ | $[4,3,2]$ |
| $5 $ | $3$ | $[3]$ | $[4,2]$ |
| $6 $ | $2$ | $[2,3]$ | $[4]$ |
| $7 $ | $2$ | $[2,3]$ | $[4]$ |
| $8 $ | $1$ | $[2,3]$ | $[1,4]$ |
| $9 $ | $3$ | $[3,2]$ | $[1,4]$ |
| $10$ | $4$ | $[4,3,2]$ | $[1]$ |
### 评测用例规模与约定
- 对于 $20\%$ 的评测用例,$1 \leq n_1, n_2 \leq 10$,$1 \leq m \leq 10$;
- 对于 $40\%$ 的评测用例,$1 \leq n_1, n_2 \leq 20$,$1 \leq m \leq 100$;
- 对于 $60\%$ 的评测用例,$1 \leq n_1, n_2 \leq 100$,$1 \leq m \leq 1000$;
- 对于 $80\%$ 的评测用例,$1 \leq n_1, n_2 \leq 10^3$,$1 \leq m \leq 10^4$;
- 对于所有评测用例,$1 \leq n_1, n_2 \leq 10^4$,$1 \leq m \leq 10^5$,$0 \leq v_i \leq 10^4$。