#P9639. 「yyOI R1」youyou 的序列

    ID: 10850 远端评测题 1000ms 128MiB 尝试: 0 已通过: 0 显示难度提高 上传者: 标签>动态规划 DP树状数组O2优化

「yyOI R1」youyou 的序列

题目描述

给定一个长度为 nn 的序列 a1…na_{1\dots n},以及 qq 次操作。

定义一次操作为:交换 aka_k 与 ak+1a_{k+1} 的值,并立即询问所有以 ai  (i∈[1,n])a_i \;( i\in [1,n]) 为峰的子序列数量之和,对 42949672964294967296 取模。这里的交换是暂时的,也就是说,它仅在下一次操作前有效。

在此我们认为,一个长度至少为 11 的序列 $[a_1,a_2 ,\cdots,a_{s-1},a_s,a_{s+1},\cdots,a_{n-1},a_n ]$,满足 $a_1<a_2<\cdots<a_{s-1}<a_s>a_{s+1}>\cdots >a_{n-1}>a_n$,则称此序列为以 asa_s 为峰的序列。

你的任务是回答出所有操作的答案。

输入格式

第一行输入两个整数 n,qn,q。

第二行输入 nn 个正整数,表示一开始的序列 a1…na_{1\dots n}。

第三行,输入一个整数 kk,表示进行第一次操作(定义见上),保证 1≤k<n1\le k <n。


第 22 到第 qq 次操作的 kk 值由如下方法得到:

int Answer(unsigned int ans)
{
    unsigned int BASE=998244353ll*ans+ans*ans+ans/9991+ans%2159;
    BASE^=9810;
    BASE^=51971;
    BASE=BASE>>7;
    BASE=BASE<<11;
    BASE^=751669;
    BASE^=23465695622566ll;
    return BASE%(n-1)+1;
}

当你每完成一次询问后,将你这次询问的答案 ansans 作为参数,恰好调用一次 Answer(ans) 。

得到的返回值即为下一次操作的 kk。

注意:本输入方式仅用于减少输入量,标准算法不依赖于此输入方式。

输出格式

你需要输出所有操作的答案,每个答案输出一行。

4 3
1 5 7 3
1

12
13
13

5 5
7 7 7 7 6
1
9
9
9
9
9

提示

样例解释 #1

第一次操作的 kk 为 11。

此时序列为 [5,1,7,3][5,1,7,3]。

峰为 a1a_1:[5][5],[5,1][5,1],[5,3][5,3]。

峰为 a2a_2:[1][1]。

峰为 a3a_3:[7][7],[5,7][5,7],[1,7][1,7],[7,3][7,3],[5,7,3][5,7,3],[1,7,3][1,7,3]。

峰为 a4a_4:[3][3],[1,3][1,3]。

共计 1212 个不同的子序列,答案输出 1212。

第二次和第三次操作的 kk 均为 33 ,此时有 1313 个不同的序列满足条件。

样例解释 #2

第一次操作的 kk 为 11。

此时序列为 [7,7,7,7,6][7,7,7,7,6]。

峰为 a1a_1:[7][7],[7,6][7,6]。

峰为 a2a_2:[7][7],[7,6][7,6]。

峰为 a3a_3:[7][7],[7,6][7,6]。

峰为 a4a_4:[7][7],[7,6][7,6]。

峰为 a5a_5:[6][6]。

共计 99 个不同的子序列,答案输出 99。

后四次操作同理。


数据范围

本题采用捆绑测试。

子任务编号 nn qq 分数
11 ≤500\le 500 ≤100\le 100 1010
22 ≤2×103\le2\times10^3 ≤5×103 \le 5\times10^3 2020
33 ≤3×104\le3\times10^4 ≤104\le 10^4 3030
44 ≤106\le10^6 ≤106 \le10^6 4040

对于 100%100\% 的数据,2≤n≤1062\le n\le10^6,1≤q≤1061\le q\le10^6,1≤ai≤1041\le a_i\le10^4。