题目名称 1969. [HEOI 2015]公约数数列
输入输出 gcdxor.in/out
难度等级 ★★★
时间限制 2000 ms (2 s)
内存限制 256 MiB
测试数据 10
题目来源 Gravatar清羽 于2015-04-28加入
开放分组 全部用户
提交状态
分类标签
分块
分享题解
通过:45, 提交:99, 通过率:45.45%
Gravatarztx 100 1.027 s 3.55 MiB C++
GravatarAglove 100 1.139 s 4.60 MiB C++
GravatarChenyao2333 100 1.176 s 3.31 MiB C++
GravatarVergil 100 1.980 s 3.85 MiB C++
GravatarYoungsc 100 2.327 s 1.96 MiB C++
Gravatarapt 100 2.504 s 6.55 MiB Pascal
Gravatar真呆菌 100 2.589 s 27.48 MiB C++
Gravatar天一阁 100 2.601 s 11.92 MiB C++
Gravatar葳棠殇 100 2.701 s 4.13 MiB C++
Gravatarzhanggengchen 100 2.816 s 5.27 MiB Pascal
关于 公约数数列 的近10条评论(全部评论)
这不应该是nsqrt(n)log^2的算法么...为什么能过
GravatarCSU_Turkey
2017-12-25 19:47 4楼
GravatarLOSER
2016-10-08 20:14 3楼
map不用count()就过不了。。
这是什么道理!?
而且,实验证明,迭代版的gcd比递归慢(在不爆栈的情况下)
Gravatar_Itachi
2016-10-07 20:40 2楼
cojs氧气就是足,赞!!!!!!!!
GravatarRP++
2015-04-28 19:34 1楼

1969. [HEOI 2015]公约数数列

★★★   输入文件:gcdxor.in   输出文件:gcdxor.out   简单对比
时间限制:2 s   内存限制:256 MiB

【问题描述】

设计一个数据结构. 给定一个正整数数列 $a_0, a_1, ...,a_{n - 1}$,你需要支持以下两种操作:

1. MODIFY id x: 将 $a_{id}$ 修改为 x.

2. QUERY x: 求最小的整数 $p (0 <= p < n)$,使得 $\gcd(a_0,a_1, ..., a_p) * xor(a_0, a_1, ..., a_p) = x$. 其中 $xor(a_0, a_1, ..., a_p)$ 代表 $a_0, a_1, ..., a_p$ 的异或和,$\gcd$表示最大公约数。

【输入格式】

输入数据的第一行包含一个正整数 $n$.

接下来一行包含 $n$ 个正整数 $a_0, a_1, ..., a_{n- 1}.$

之后一行包含一个正整数 $q$,表示询问的个数。

之后 $q$ 行,每行包含一个询问。格式如题目中所述。

【输出格式】

对于每个 QUERY 询问,在单独的一行中输出结果。如果不存在这样的 $p$,输出 no.

【样例输入】

10
1353600 5821200 10752000 1670400 3729600
6844320 12544000 117600 59400 640
10
MODIFY 7 20321280
QUERY 162343680
QUERY 1832232960000
MODIFY 0 92160
QUERY 1234567
QUERY 3989856000
QUERY 833018560
MODIFY 3 8600
MODIFY 5 5306112
QUERY 148900352

【样例输出】

6
0
no
2
8
8

【数据规模与约定】

对于 30% 的数据,$n\leq 10000,q\leq 1000$。

对于 100% 的数据,$n\leq 100000,q\leq 10000,a_i\leq 10^9(0\leq i<n)$,QUERY x 中的 $x\leq 10^{18}$,MODIFY id x 中的 $0\leq id< n,1\leq x\leq 10^9$。