UOJ Logo Universal Online Judge

UOJ

#327. 【UTR #3】去月球

附件下载 统计

Scape和Mythological交流了玩几何冲刺的经验之后,Mythological非常高兴,又推荐给Scape一款游戏To the moon。

游戏中一位老人John的记忆被药物尘封,进行了解除尘封的仪式之后,Scape走入了他的记忆。

John的记忆中有一个唤做River女孩的身影,有着数不尽的纸兔子,有一个沙包,一只鸭嘴兽玩偶,一座灯塔。Scape被深深的打动了。

”我的鸭嘴兽和沙包又在哪里呢?” Scape这样想到,不禁幻想出Mythological决定给他送 n 份礼物,其中第 i 份的种类是 ai。这些礼物按顺序排成一行。

她挑选礼物的方式很特别,她每次会选择两份种类相同的礼物,并且这对礼物满足它们之间没有尚未拿走的礼物,并将这对礼物拿走。

现在Scape给出了若干次询问,每次询问如果他送给她的是区间 [Li,Ri] 之间的礼物,那么她最多能拿走多少份礼物。

任务

你需要编写两个函数/过程,以完成题目的任务:

  • init(n, m, a[], t);
    • 在程序最开始运行时会调用一次来完成初始化。
    • n 表示 a 的长度是 nm 表示 ai 的最大可能值,a 数组的下标从 1 开始,t 表示子任务编号。
  • query(l, r);
    • 表示询问区间 [L,R] 的答案 。
    • 保证 LR

实现细节

本题只支持 C/C++。

你只能提交一个源文件实现如上所述的 init 和 query 函数/过程,并且遵循下面的命名和接口。你需要包含头文件 mythological.h。

void init(int n, int m, int a[], int t);
int query(int l, int r);

如果有不清楚的地方,见样例及测评库下载,内附了样例程序

评测库大概需要占用8MB的内存和100ms的时间。

因为评测库使用了fread来进行快速读入,所以用命令行输入数据的选手需要在输入数据完毕后用"Ctrl+D"来输入EOF。

评测方式

评测系统将读入如下格式的输入数据:

  1. 1 行:四个整数 n,m,q,t,分别是这组测试数据的大小,ai 的最大可能值,询问个数和子任务编号。
  2. 2 行:n 个整数,第 i 个整数表示 ai
  3. 2+i 行(1iq):两个整数 Li,Ri,表示询问的区间。

样例一

input

9 10 3 0
1 1 3 2 1 1 2 3 1
2 9
1 2
2 5

output

8
2
0

样例二

input

10 10 3 0
1 2 3 4 5 6 7 8 9 10
1 9
2 3
4 5

output

0
0
0

样例三

见样例及测评库下载。

限制与约定

对于所有数据,1n1×1051m1×105q2×106LiRi

为了拿到每个子任务的分数,你必须通过所有他依赖的子任务。

子任务 分值 n q 其他性质 依赖的subtask
1 20 1000 1000
2 16 1×105 1×105 每种权值最多出现两次 1
3 25 1×105 1×105 询问的 L,R 生成方式给出(见下) 1
4 19 1×105 1×105 1,2,3
5 20 1×105 2×106 1,2,3,4

子任务3生成询问的方式如下:

定义 Fi=(2000i2+629i+2333)modn+1

则对所有的 1iq,有 Li=min{F2i1,F2i} Ri=max{F2i1,F2i}

交互式类型的题目怎么本地测试

时间限制:2s

空间限制:512MB

下载

样例数据下载