博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【CODEFORCES】 D. CGCDSSQ
阅读量:5292 次
发布时间:2019-06-14

本文共 1762 字,大约阅读时间需要 5 分钟。

D. CGCDSSQ
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Given a sequence of integers a1, ..., an and q queries x1, ..., xq on it. For each query xi you have to count the number of pairs (l, r)such that 1 ≤ l ≤ r ≤ n and gcd(al, al + 1, ..., ar) = xi.

 is a greatest common divisor of v1, v2, ..., vn, that is equal to a largest positive integer that divides all vi.

Input

The first line of the input contains integer n, (1 ≤ n ≤ 105), denoting the length of the sequence. The next line contains n space separated integers a1, ..., an, (1 ≤ ai ≤ 109).

The third line of the input contains integer q, (1 ≤ q ≤ 3 × 105), denoting the number of queries. Then follows q lines, each contain an integer xi, (1 ≤ xi ≤ 109).

Output

For each query print the result in a separate line.

Sample test(s)
input
32 6 3512346
output
12201
input
710 20 3 15 1000 60 16101234561020601000
output
14022202211
题解:题目大意是说给你一个序列。然后有q个询问,每一个询问描写叙述成一个正整数c,问你在这个序列中,区间上的最大公约数等于c的区间共同拥有多少个。

由于我们仅仅关心个数而并不关心区间,所以能够递推来写。如果我们知道了第以i个数为结尾的全部区间上的最大公约数,我们就能够统计他的个数。而我们在讨论i+1的时候,我们是能够推出以第i+1个数结尾的全部最大公约数的(和第i个数的结果依次取GCD即可),然后统计个数(事实上就是直接加进去)。

最后记得每次把第i个数的结果加到ANS里面即可了。

代码并不长。时间也不长。果然是由于map太快了么= =||

#include 
#include
#include
#include
using namespace std;int a[100005],n,q,c;int gcd(int a,int b){ if (!b) return a; else return gcd(b,a%b);}map
ans;map
last;map
now;map
::iterator itr;int main(){ scanf("%d",&n); for (int i=0;i
first,a[i])]+=itr->second; now[a[i]]++; for (itr=now.begin();itr!=now.end();itr++) ans[itr->first]+=itr->second; } scanf("%d",&q); for (int i=0;i

转载于:https://www.cnblogs.com/lxjshuju/p/6944035.html

你可能感兴趣的文章
用HttpCombiner来减少js和css的请问次数
查看>>
FUSE-用户空间文件系统
查看>>
将tiff文件转化为jpg文件并保存
查看>>
ubuntu 16.04 开机脚本
查看>>
 VS2012 C#调用C++ dll
查看>>
TCL:表格(xls)中写入数据
查看>>
SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)
查看>>
django 学习笔记(转)
查看>>
控制台程序秒变Windows服务(Topshelf)
查看>>
字节流与字符流的区别详解
查看>>
20141026--娱乐-箱子
查看>>
自定义分页
查看>>
Oracle事务
查看>>
任意输入10个int类型数据,把这10个数据首先按照排序输出,挑出这些数据里面的素数...
查看>>
String类中的equals方法总结(转载)
查看>>
图片问题
查看>>
bash使用规则
查看>>
AVL数
查看>>
第二章练习
查看>>
ajax2.0
查看>>