A+B Problem
时间限制:C/C++/Rust/Pascal 6秒,其他语言12秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一个长度为 n 的数组 a,数组中的所有元素都是 [1,m] 范围内的正整数;
你需要回答 q 次询问,每一次询问会给出一个正整数 x,对于每个询问,你需要输出 f(x) 的值;
其中,你需要遵循以下步骤来计算 f(x) 的值:
①:令 c 为你的得分,初始时为 0
②:若数组 a 中存在两个不同的下标 i,j 满足 a_i+a_j=x,且 i,j 位置上的数字都没有被删除,则将下标 i,j 位置上的数字删除,然后令 c=c+1
③:重复步骤 ②,直到无法继续从数组 a 中删除数字,此时,令 f(x)=c
④:将数组 a 恢复原样

输入描述:

第一行输入三个正整数 n,m,q\ (1\leq{n,m}\leq{3\cdot10^5},1\leq{q}\leq{6\cdot10^5}),分别表示数组的长度、数组中每个元素的最大可能取值、以及询问的次数;

第二行输入 n 个正整数 a_1,a_2,...,a_n\ (1\leq{a_i}\leq{m}),表示数组中的每个元素的取值;

接下来 q 行,每行输入一个正整数 x\ (1\leq{x}\leq{2\cdot m}),表示需要查询 f(x) 的值。

输出描述:

对于所有的 q 次询问,输出 q 行:

i 行输出一个整数 c,表示第 i 次查询对应的 f(x) 的值。
示例1

输入

复制
4 2 2
1 1 2 2
3
4

输出

复制
2
1