CFCF2201D.Binary Not Search and Queries
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
对于一个由 m 个整数构成的序列 b,定义集合 S(b) 为满足以下条件的三元组 (i,j,k) 的集合:
- i、j、k 为整数;
- 1≤k<m;
- 1≤i<j≤m−k+1;
- 对于 b 中的每个元素 v,v 在 [bi,bi+1,…,bi+k−1] 和 [bj,bj+1,…,bj+k−1] 中出现的次数相同。
例如,当 b=[1,2,1,2] 时,三元组 (1,3,2) 属于 S(b),因为 1 和 2 在 [b1,b2] 和 [b3,b4] 中都各出现了一次。
另外,定义两个函数,作用于正整数序列:
- kmax(b) 表示 S(b) 中所有元素 (i,j,k) 的 k 的最大值;
- f(b) 表示 S(b) 中所有 k=kmax(b) 的不同三元组 (i,j,k) 的数量。
特别地,当集合 S(b) 为空时,规定 kmax(b)=0 且 f(b)=0。
现在给定一个长度为 n 的整数序列 a,请你回答 q 个如下查询:
- ix :将 ai 的值改为 x,然后计算 kmax(a) 与 f(a)。
请注意,更新是持续的,即一次查询中的更改会影响后续的查询。
输入格式
每组测试数据包含多个测试用例。第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。
每个测试用例的第一行包含两个整数 n 和 q(2≤n≤200000,1≤q≤100000)。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an(1≤ai≤n)。
接下来的 q 行每行包含两个整数 ij 和 xj,表示第 j 个查询(1≤ij,xj≤n)。
保证所有测试用例中的 n 之和不超过 200000。
保证所有测试用例中的 q 之和不超过 100000。
输出格式
对于每个测试用例,输出 q 行。
第 j 行输出第 j 次查询后 a 的 kmax(a) 和 f(a) 值。
保证在本题的约束下,这两个值均不会超过 1011。
输入输出样例
输入#1
4 5 3 1 2 3 4 5 3 2 4 1 5 2 4 3 1 2 1 1 4 2 3 2 2 1 5 2 1 3 2 4 5 5 3 5 5 8 3 1 2 3 4 1 2 5 4 7 3 7 4 2 1
输出#1
1 1 3 1 3 3 2 3 2 1 1 2 3 1 0 0 4 10 4 4 4 2
说明/提示
在第二个测试用例第一次查询后,a=[1,2,1,2]。此时 S(a) 的元素如下:
- (1,3,1):[1,2,1,2];
- (2,4,1):[1,2,1,2];
- (1,2,2):[1,2,1,2];
- (1,3,2):[1,2,1,2];
- (2,3,2):[1,2,1,2]。
因此,kmax(a)=2,f(a)=3,因为存在三个三元组 (i,j,k) 满足 k=kmax(a)=2。
在第三个测试用例第二次查询后,a=[1,3,2,4,5],此时 S(a) 为空。
据定义,此时应输出 kmax(a)=0 和 f(a)=0,因为 S(a) 目前为空。