luogu#P10063. [SNOI2024] 平方数

[SNOI2024] 平方数

题目背景

原题时间限制为 1.5 s。

由于 hack 数据难以通过,改为 10 s。

题目描述

你有一个正整数序列 a1,a2,,ana_1, a_2, \ldots, a_n。请问有多少个区间的乘积是完全平方数。也就是有多少对 (l,r)(l, r)1lrn1 \le l \le r \le n),满足 i=lrai\prod_{i = l}^{r} a_i 是完全平方数。

输入格式

第一行一个整数 nn 表示数字个数。
接下来一行,每行 nn 个数,表示 a1,a2,,ana_1, a_2, \ldots, a_n

输出格式

输出一个整数,表示有多少对区间的乘积是完全平方数。
接下来按照字典序输出这些区间,也就是按照 ll 从小到大输出。
如果有多个 ll 相同的区间,按照 rr 从小到大输出。如果区间个数超过 105{10}^5 个,输出前 105{10}^5 个即可。

10
1 2 3 4 6 8 9 12 16 18

12
1 1
1 5
2 5
3 6
3 7
4 4
4 8
4 9
5 8
5 9
7 7
9 9

3
999999999999999956000000000000000363 999999999999999844000000000000004059 999999999999999866000000000000001353

1
1 3

提示

【样例 #2 解释】

在第二个样例中,这三个数为 101811,101833,1018123{10}^{18} - 11, {10}^{18} - 33, {10}^{18} - 123 两两相乘。


【样例 #3】

见附件中 square/square3.insquare/square3.ans

这个样例满足测试点 464 \sim 6 的条件限制。


【样例 #4】

见附件中 square/square4.insquare/square4.ans

这个样例满足测试点 111411 \sim 14 的条件限制。


【样例 #5】

见附件中 square/square5.insquare/square5.ans

这个样例满足测试点 182018 \sim 20 的条件限制。


【数据范围】

对于所有的数据,保证 1n3×1051 \le n \le 3 \times {10}^51ai10361 \le a_i \le {10}^{36}

具体如下:

测试点编号 nn \le aia_i \le
131 \sim 3 10001000 104{10}^4
464 \sim 6 105{10}^5 106{10}^6
7107 \sim 10 100100 1036{10}^{36}
111411 \sim 14 10001000
151715 \sim 17 105{10}^5
182018 \sim 20 3×1053 \times {10}^5