bzoj#P4837. [Lydsy2017年4月月赛]LRU算法

[Lydsy2017年4月月赛]LRU算法

题目描述

小 Q 同学在学习操作系统中内存管理的一种页面置换算法,LRU(LeastRecentlyUsed) 算法。

为了帮助小 Q 同学理解这种算法,你需要在这道题中实现这种算法,接下来简要地介绍这种算法的原理:

  1. 初始化时,你有一个最大长度为 nn 的空队列,用于暂时存储一些页面的地址。
  2. 当系统需要加载一个不在队列中的页面时,如果队列已满,则弹出队首元素,并将需要加载的页面加到队 尾,否则直接将需要加载的页面加到队尾。
  3. 当系统需要加载一个在队列中的页面时,将该页面移至队尾。

在这道题中,小 Q 同学需要处理有 qq 个请求,每个请求会给定一个整数 xx,表示系统需要加载地址为 xx 的页面,而你需要在每个请求完成后给出整个队列中页面的地址之和。为了便于计算,设第 ii 个请求给出的整数为 xix_i,第 ii 个请求后你给出的答案为 yiy_i,则对于 1<iq1<i\le qxi=(A×xi1+B)modpx_i=(A\times x_{i-1}+B)\bmod p,其中 x1,A,B,px_1,A,B,p 是给定的整数,并且你只需要输出 i=1qi×yi\sum\limits_{i=1}^q i\times y_i, 对 2642^{64} 取模的值,而不是每个 yiy_i

输入格式

第一行包含一个正整数 TT,表示有 TT 组数据。 接下来依次给出每组测试数据。对于每组测试数据: 第一行包含两个正整数 nnqq 。 第二行包含四个整数 x1,A,B,px_1,A,B,p

输出格式

对于每组测试数据,输出一行一个非负整数,表示这组数据的答案。

样例输入

2
5 10
0 1 1 5
5 10
0 1 1 10

样例输出

485
1135

数据范围与约定

对于 100%100\% 的数据,1n1051\le n \le 10^51q1061\le q\le 10^6T20T\le 200x1,A,B<p0\le x_1,A,B<p1p106+31\le p\le 10^6+3

题目来源

鸣谢Tangjz提供试题