map+pair Bayan 2015 Contest Warm Up D题
2 seconds
256 megabytes
standard input
standard output
Given a sequence of integers a1, ..., an andq queries
x1, ..., xq on it. For each queryxi 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 ofv1, v2, ..., vn,
that is equal to a largest positive integer that divides allvi.
The first line of the input contains integer n, (1 ≤ n ≤ 105), denoting the length of the sequence. The next line containsn
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 followsq
lines, each contain an integer xi, (1 ≤ xi ≤ 109).
For each query print the result in a separate line.
3
2 6 3
5
1
2
3
4
6
1
2
2
0
1
7
10 20 3 15 1000 60 16
10
1
2
3
4
5
6
10
20
60
1000
14
0
2
2
2
0
2
2
1
1
题意给你一个序列和q个询问,输出有多少个区间[l,r]满足区间gcd为询问的值。
思路:处理出每一个区间的gcd(要注意合并区间),假设有询问则直接加上去。
#include <bits/stdc++.h>
using namespace std;
std::map<int, int> id;
vector<pair<int,int> >gcdList;
const int MAXN=100000+5;
int query[MAXN*3],A[MAXN];
long long ans[MAXN*3];
int _gcd(int a,int b){return b?_gcd(b,a%b):a;}
int ID(int x){
if(!id[x])id[x]=id.size();
return id[x];
}
int main(int argc, char const *argv[])
{
int n;
ios_base::sync_with_stdio(false);
gcdList.clear();id.clear();
cin>>n;
for(int i=1;i<=n;i++)cin>>A[i];
int q;cin>>q;
for(int i=1;i<=q;i++){
cin>>query[i];
query[i]=ID(query[i]);
}
for(int i=1;i<=n;i++){
for(int j=0;j<gcdList.size();j++)
gcdList[j].first=_gcd(gcdList[j].first,A[i]);
gcdList.push_back(make_pair(A[i],i));
int cnt=1;
//sort(gcdList.begin(), gcdList.end());
for(int j=1;j<gcdList.size();j++){
if(gcdList[j].first!=gcdList[cnt-1].first)
gcdList[cnt++]=gcdList[j];
}
gcdList.resize(cnt);
for(int j=0;j<gcdList.size();j++){
if(id[gcdList[j].first]){
int r=i+1;
if(j+1<gcdList.size())r=gcdList[j+1].second;
ans[id[gcdList[j].first]]+=r-gcdList[j].second;
}
}
}
for(int i=1;i<=q;i++)cout<<ans[query[i]]<<endl;
return 0;
}
map+pair Bayan 2015 Contest Warm Up D题的更多相关文章
- Bayan 2015 Contest Warm Up D题(GCD)
D. CGCDSSQ time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- Bayan 2015 Contest Warm Up D. CGCDSSQ (math,pair,map,暴力)
哎,只能转题解了,,, 8165031 2014-10-10 15:53:42 njczy2010 D - CGCDSSQ GN ...
- Codeforces Round #378 (Div. 2) D. Kostya the Sculptor map+pair
D. Kostya the Sculptor time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
- CodeForces - 633D Fibonacci-ish 大数标记map+pair的使用
Fibonacci-ish Yash has recently learnt about the Fibonacci sequence and is very excited about it. He ...
- 2018 ICPC 徐州网络预赛 Features Track (STL map pair)
[传送门]https://nanti.jisuanke.com/t/31458 [题目大意]有N个帧,每帧有K个动作特征,每个特征用一个向量表示(x,y).两个特征相同当且仅当他们在不同的帧中出现且向 ...
- COCI2014/2015 Contest#1 D MAFIJA【基环树最大独立点集】
T1725 天黑请闭眼 Online Judge:COCI2014/2015 Contest#1 D MAFIJA(原题) Label:基环树,断环+树形Dp,贪心+拓扑 题目描述 最近天黑请闭眼在 ...
- BZOJ 4236 "JOIOJI"(前缀和+map+pair)
传送门: [1]:BZOJ [2]:洛谷 •题解 定义数组 a,b,c 分别表示 'J' , 'O' , 'I' 的前缀和: 要想使区间 (L,R] 满足条件当且仅当 a[R]-a[L] = b[R] ...
- CF988 C. Equal Sums【map+pair/hash/任选两个序列,两个序列都除去他们中的一个数,使的总和相同】
[链接]:CF988C [题意]:在n个序列中任选两个序列,两个序列都除去他们中的一个数,使的总和相同 [分析]:map<int,pair<int,int> > mp,从0~m ...
- Codeforces Round #486 (Div. 3) C "Equal Sums" (map+pair<>)
传送门 •题意 给k个数列,从中k个数列中找出任意2个数列 i ,j 使得数列i删除第x个数,和数列j删除第y个数的和相等 若存在,输出 i ,x 和 j,y •思路 每个数列之间的联系为数列的和之间 ...
随机推荐
- 只用CSS做到完全居中
我们都知道 margin:0 auto; 的样式能让元素水平居中,而 margin: auto; 却不能做到垂直居中……直到现在.但是,请注意!想让元素绝对居中,只需要声明元素高度,并且附加以下样式, ...
- IOS系统之蓝牙外接设备
Ios系统对于蓝牙外接设备在iphone4以前都是蓝牙2.0的时候,需要通过苹果的审核,据统计通过率仅有2%左右,现在蓝牙2.0基本上处于淘汰状态,所以在这里就不考虑了. 现在iphone4s以后的设 ...
- 解决 ASP.NET 编辑错误"CS0006: 未能找到元数据文件C:\WINDOWS\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll"
问题背景: 公司最近给我配置了一台新Windows 7旗舰版的电脑,这几天一直在迁移文件,因为新电脑上安装Sqlserver r2失败,解决方法是要安装一个800+MB的安装包 由于最近手上事情比较多 ...
- Android控件之HorizontalScrollView 去掉滚动栏
在默认情况下.HorizontalScrollView控件里面的内容在滚动的情况下,会出现滚动栏,为了去掉滚动栏.仅仅须要在<HorizontalScrollView/>里面加一句 ...
- shell命令xargs解析
1.多行变成单行 -bash-3.2# cat test.txt a b c d e f g o p q -bash-3.2# cat test.txt |xargs a b c d e f g o ...
- 【OpenCV新手教程之十七】OpenCV重映射 & SURF特征点检測合辑
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨) ...
- VIM显示utf-8文档乱码解决方法
1.相关基础知识介绍 在Vim中.有四个与编码有关的选项,它们是:fileencodings.fileencoding.encoding和termencoding. 在实际使用中.不论什么一个选项出现 ...
- MISRA 2004 VS MISRA 2012
- jQuery中first-child与first选择器区别
1.first-child first-child为每个父级元素匹配第一个子元素,可以匹配出多个元素: 示例代码: <!DOCTYPE html> <html lang=" ...
- 在交叉编译中使用最新版的SS
因为旧版本的ss-local总是出现 shake hands failed 错误, 打算用最新的版本试试, 所以尝试在编译中使用最新版的shadowsocks. 项目地址 Shadowsocks-li ...