浅谈\(RMQ\):https://www.cnblogs.com/AKMer/p/10128219.html

题目传送门:https://codeforces.com/problemset/problem/475/D

我们考虑当\(l\)固定之后,\(r\)在某个区间内的\(gcd\)是一样的,而且这样的区间只有\(log\)个,因为\(gcd\)改变的话至少会除以二。所以我们就可以用\(st\)表存\(gcd\),然后\(log^2\)的去往后跳,统计出一个一个这样的区间,最后离线处理所有的询问即可。

时间复杂度:\(O(nlog^2n)\)

空间复杂度:\(O(nlogn)\)

代码如下:

#include <cstdio>
using namespace std;
typedef long long ll; const int maxn=1e5+5,pps=1e7+7; int n,m;
int f[18][maxn];
int a[maxn],Log[maxn]; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} struct HASH {
int tot;
int head[pps];
ll sum[maxn*20];
int nxt[maxn*20],g[maxn*20]; void ins(int v,int cnt) {
int tmp=v%pps;
for(int i=head[tmp];i;i=nxt[i])
if(g[i]==v) {sum[i]+=cnt;return;}
sum[++tot]=cnt,g[tot]=v,nxt[tot]=head[tmp],head[tmp]=tot;
} ll find(int v) {
int tmp=v%pps;
for(int i=head[tmp];i;i=nxt[i])
if(g[i]==v)return sum[i];
return 0;
}
}H; int gcd(int a,int b) {
while(b) {
int tmp=b;
b=a%b;a=tmp;
}
return a;
} int find(int st,int GCD) {
for(int i=Log[n-st+1];i;i--)
if(f[i][st]&&f[i][st]%GCD==0)
st=st+(1<<i)-1;
return st+1;
} void make_ans() {
Log[0]=-1;
for(int i=1;i<=n;i++)
Log[i]=Log[i>>1]+1;
for(int i=1;i<=17;i++)
for(int j=1;j+(1<<i)-1<=n;j++)
f[i][j]=gcd(f[i-1][j],f[i-1][j+(1<<(i-1))]);
for(int i=1;i<=n;i++) {
int pos=i,GCD=a[i];
while(pos<=n) {
int newpos=find(pos,GCD);
H.ins(GCD,newpos-pos);
pos=newpos,GCD=gcd(GCD,a[newpos]);
}
}
} int main() {
n=read();
for(int i=1;i<=n;i++)
f[0][i]=a[i]=read();
make_ans(),m=read();
for(int i=1;i<=m;i++) {
int x=read();
printf("%lld\n",H.find(x));
}
return 0;
}

CF475D:CGCDSSQ的更多相关文章

  1. java web 开发三剑客 -------电子书

    Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知In ...

  2. 所有selenium相关的库

    通过爬虫 获取 官方文档库 如果想获取 相应的库 修改对应配置即可 代码如下 from urllib.parse import urljoin import requests from lxml im ...

  3. codeforces 475D. CGCDSSQ

    D. CGCDSSQ time limit per test 2 seconds memory limit per test 256 megabytes Given a sequence of int ...

  4. Codeforces475D - CGCDSSQ

    Portal Description 给出长度为\(n(n\leq10^5)\)的序列\(\{a_n\}\),给出\(q(q\leq3\times10^5)\)个\(x\),对于每个\(x\),求满足 ...

  5. Bayan 2015 Contest Warm Up D. CGCDSSQ (math,pair,map,暴力)

    哎,只能转题解了,,, 8165031                 2014-10-10 15:53:42     njczy2010     D - CGCDSSQ             GN ...

  6. 【CODEFORCES】 D. CGCDSSQ

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

  7. In-Memory:内存数据库

    在逝去的2016后半年,由于项目需要支持数据的快速更新和多用户的高并发负载,我试水SQL Server 2016的In-Memory OLTP,创建内存数据库实现项目的负载需求,现在项目接近尾声,系统 ...

  8. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  9. 【.net 深呼吸】细说CodeDom(8):分支与循环

    有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...

随机推荐

  1. python脚本分析nginx访问日志

    日志格式如下: 223.74.135.248 [11/May/2017:11:19:47 +0800] "POST /login/getValidateCode HTTP/1.1" ...

  2. php header, 允许ajax跨域访问

    <?php header('content-type:application:json;charset=utf8'); header('Access-Control-Allow-Origin:* ...

  3. Redis 配置和使用

    Redis的配置 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者me ...

  4. Blobstore Java API overview

    Blobstore API允许你的应用程序使用(serve)叫做Blobs的数据对象.这种数据对象比Datastore服务所允许的对象的尺寸大得多.Blobs能有效地为大文件比如视频.图片提供服务,允 ...

  5. Flex自定义组件开发

    一般情况下需要组件重写都是由于以下2个原因:1.在FLEX已有组件无法满足业务需求,或是需要更改其可视化外观等特性时,直接进行继承扩展.2.为了模块化设计或进一步重用,需要对FLEX组件进行组合.而F ...

  6. python微信库 --- itchat

    python实现微信接口——itchat模块 安装 pip install itchat 登录 itchat.auto_login() # 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短 ...

  7. java并发实现原子操作

    来自<java并发编程的艺术>.只是方便自己以后查找. 处理器如何实现原子操作 32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作.首先处理器会自动保证基 ...

  8. Java多线程系列 JUC线程池03 线程池原理解析(二)

    转载  http://www.cnblogs.com/skywang12345/p/3509954.html  http://www.cnblogs.com/skywang12345/p/351294 ...

  9. 【leetcode刷题笔记】Combination Sum II

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...

  10. 在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务【转】

    本文转载自:http://blog.csdn.net/luoshengyang/article/details/6578352 在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行 ...