#CF896C. Willem, Chtholly and Seniorious

    ID: 12662 传统题 2000ms 350MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>暴力数据结构颜色段均摊(珂朵莉树 ODT)枚举排序构造提高+/省选−

Willem, Chtholly and Seniorious

CF896C Willem, Chtholly and Seniorious

题目描述

nn 个整数的序列 aia _ i

执行 mm 次操作。

有四种操作类型:

  • 1 l r x1\ l\ r\ x :对于 ii 满足 lirl \le i \le r,将 ai+xa _ i + x 赋值给 aia _ i
  • 2 l r x2\ l\ r\ x :对于 ii 满足 lirl \le i \le r,将 xx 赋值给 aia _ i
  • 3 l r x3\ l\ r\ x :输出范围 [l,r][l, r] 中第 xx 小的数字,即在所有满足 lirl \le i \le raia _ i 排序后第 xx 小的数字。保证 1xrl+11 \le x \le r - l + 1
  • 4 l r x y4\ l\ r\ x\ y :输出范围 [l,r][l, r] 中所有 aia _ ixx 次幂之和模 yy,即 $\left( \sum _ {i = l} ^ r {a _ i} ^ x \right) \bmod y$。

输入格式

第一行包含四个整数 n,m,seed,vmaxn, m, seed, v _ {max}1n,m1051 \le n, m \le 10 ^ 50seed<109+70 \le seed < 10 ^ 9 + 71vmax1091 \le v _ {max} \le 10 ^ 9)。

初始值和操作通过如下伪代码生成:

def rnd():

    ret = seed
    seed = (seed * 7 + 13) mod 1000000007
    return ret

for i = 1 to n:

    a[i] = (rnd() mod vmax) + 1

for i = 1 to m:

    op = (rnd() mod 4) + 1
    l = (rnd() mod n) + 1
    r = (rnd() mod n) + 1

    if (l > r): 
         swap(l, r)

    if (op == 3):
        x = (rnd() mod (r - l + 1)) + 1
    else:
        x = (rnd() mod vmax) + 1

    if (op == 4):
        y = (rnd() mod vmax) + 1

这里的 opop 是题目中提到的操作类型。

输出格式

对于每个类型为 3344 的操作,输出答案。

输入输出样例 #1

输入 #1

10 10 7 9

输出 #1

2
1
0
3

输入输出样例 #2

输入 #2

10 10 9 9

输出 #2

1
1
3
3

说明/提示

对于样例 1,初始数组为 {8,9,7,2,3,1,5,6,4,8}\{8,9,7,2,3,1,5,6,4,8\}

操作如下:

  • 2 6 7 9 2\ 6\ 7\ 9
  • 1 3 10 8 1\ 3\ 10\ 8
  • 4 4 6 2 4 4\ 4\ 6\ 2\ 4
  • 1 4 5 8 1\ 4\ 5\ 8
  • 2 1 7 1 2\ 1\ 7\ 1
  • 4 7 9 4 4 4\ 7\ 9\ 4\ 4
  • 1 2 7 9 1\ 2\ 7\ 9
  • 4 5 8 1 1 4\ 5\ 8\ 1\ 1
  • 2 5 7 5 2\ 5\ 7\ 5
  • 4 3 10 8 5 4\ 3\ 10\ 8\ 5