A. 归并排序 1

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较

题目描述

如何将两个递增数组合并为1个,并保证合并后的数组依然单调递增,时间复杂度要求 O(N)。

为避免大量输入输出占用过多时间,本题目提供随机数种子方式进行输入输出。

请在你的代码中添加如下代码:


using lint=long long;
mt19937 gen;
void init(lint seed){
	gen.seed(seed);
}
lint pre=0;
lint get_lint(){
	lint curr=gen()%1000+1000+pre;
	pre=curr;
	return curr;
}
using lint=long long;
lint get_hash(lint c[],lint length,lint seed){
	lint res=0;
	for(int i=1;i<=length;i++){
		res=(res*seed%998244353+c[i])%998244353;
		if(res<0) res+=998244353;
	}
	if(res<0) res+=998244353;
	return res;
}

输入格式

为了避免大量输入占用过多时间,本题目输入采用 seed 方式提供输入。 输入文件有两个整数,n 和 seed 。n 如题目所述, seed 表示随机数种子。 开始读入数据之前,请记得你的程序运行了 init(seed) 函数。

之后,调用一次 get_lint() 即可获取一个输入。

所以,你应该 调用 2*n 次 get_lint() ,获取完整输入。

输出格式

为了避免大量输出占用过多时间,你只需要输出 hash 值。hash 函数已经提供。 你只需要将长度为 2*n 的数组(请保证下标从 1 开始 )传入 get_hash 函数即可。

例如,你的数组名叫 arr_c ,那么,你只需要输出 get_hash(arr_c,2*n,seed) 函数的值即可。不需要对函数体进行任何修改。

样例

样例 #1

样例输入 #1

5 10

样例输出 #1

820057608

数据范围与提示

N <= 1e7 。