题目背景
原题时间限制为 1.5 s。
由于 hack 数据难以通过,改为 10 s。
题目描述
你有一个正整数序列 a1,a2,…,an。请问有多少个区间的乘积是完全平方数。也就是有多少对 (l,r)(1≤l≤r≤n),满足 ∏i=lrai 是完全平方数。
输入格式
第一行一个整数 n 表示数字个数。
接下来一行,每行 n 个数,表示 a1,a2,…,an。
输出格式
输出一个整数,表示有多少对区间的乘积是完全平方数。
接下来按照字典序输出这些区间,也就是按照 l 从小到大输出。
如果有多个 l 相同的区间,按照 r 从小到大输出。如果区间个数超过 105 个,输出前 105 个即可。
提示
【样例 #2 解释】
在第二个样例中,这三个数为 1018−11,1018−33,1018−123 两两相乘。
【样例 #3】
见附件中 square/square3.in
与 square/square3.ans
。
这个样例满足测试点 4∼6 的条件限制。
【样例 #4】
见附件中 square/square4.in
与 square/square4.ans
。
这个样例满足测试点 11∼14 的条件限制。
【样例 #5】
见附件中 square/square5.in
与 square/square5.ans
。
这个样例满足测试点 18∼20 的条件限制。
【数据范围】
对于所有的数据,保证 1≤n≤3×105,1≤ai≤1036。
具体如下:
测试点编号 |
n≤ |
ai≤ |
1∼3 |
1000 |
104 |
4∼6 |
105 |
106 |
7∼10 |
100 |
1036 |
11∼14 |
1000 |
15∼17 |
105 |
18∼20 |
3×105 |