1935. 静态双链表

这是一道模板题。给定一个集合 s,初始为空。你需要维护 n 次下面的操作:

  1. 添加一个值为 v 的元素,如果已经存在则忽略该操作。
  2. 删除一个值为 v 的元素,如果本不存在则忽略该操作。
  3. 查询比值为 v 的元素严格小的最大元素的值。如果 v 不存在或 v 最小则输出 -1
  4. 查询比值为 v 的元素严格大的最小元素的值。如果 v 不存在或 v 最大则输出 -1

由于输入较多,将使用下列随机数生成算法生成输入数据。设输入的 v 值域范围为 [1,p],随机数种子为 seed,代码如下:

#include <bits/stdc++.h> using namespace std; using ll = long long; ll seed, n, p; ll nextRand() { static ll x = seed; x ^= x << 11; x ^= x >> 45; x ^= x << 14; return 1 + (x % p + p) % p; } signed main() { cin.tie(0)->ios::sync_with_stdio(false); cin >> n >> p >> seed; for (int i = 0; i < n; ++i) { int cmd = nextRand() % 4, v = nextRand(); // cmd为[1,4]对应上述四种命令,v对应操作数 } return 0; }

由于输出较大,请将每个输出求和后输出最终和式。

输入

输入一行三个整数 n,p,seed(1\le n\le 10^7,4\le p\le 10^7,1\le seed\le 2^{31})

输出

输出一行一个整数,设每次询问的答案为 ans,输出 \sum ans

样例

标准输入 复制文本
1000 50 114514
标准输出 复制文本
5755
登录以提交代码。
单点时限 2 秒
内存限制 128 MB
提交 13
通过 5