浅谈\(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. MATLAB循环结构:break+continue+嵌套

    break语句:终止当前循环,继续执行循环语句的下一语句: continue语句:跳过循环体的后面语句,开始下一个循环: 例:求[100,200]之间第一个能被21整除的整数 :200 %循环语句 ) ...

  2. SpringMVC结合REST

    一.什么是REST REST即 Representational State Transfer,也就是(资源)表现层状态转化.资源是指网络上的一个实体或者说是网络上的一个具体信息. 每种资源对应一个特 ...

  3. 解决iOS11 UIScrollView下移问题

    iOS11 系统为UIScrollView增加一个contentInsetAdjustmentBehavior属性,默认为UIScrollViewContentInsetAdjustmentAutom ...

  4. term frequency–inverse document frequency

    term frequency–inverse document frequency

  5. Django 路飞学成书写规范的总结

    路飞学成书写规范的总结 命名 项目/文件/函数 -> 小写+下划线 类 驼峰式 路由 将每个功能的路由进行分割, 或者做上注释 类和方法的注释 每个类都要注释是干什么的 每个方法也要进行注释标明 ...

  6. 什么是GIL锁以及作用

    全局解释锁,每次只能一个线程获得cpu的使用权:为了线程安全,也就是为了解决多线程之间的数据完整性和状态同步而加的锁,因为我们知道线程之间的数据是共享的.

  7. SpringMVC的第一个入门案例

    用户提交一个请求,服务器端处理器在接收到这个请求后,给出一条欢迎信息,在页面中显示. 第一步:导入jar包 在原有Springjar包基础上添加2个jar包 spring-webmvc-4.2.0.R ...

  8. t-sql判断数据库对象是否存在

    1 系统表sys.sysobjects 在数据库中创建的每个对象(例如约束.默认值.日志.规则以及存储过程)都对应一行,详细介绍参考MSDN 2 OBJECTPROPERTY 返回当前数据库中架构范围 ...

  9. 路由helper

    root_url http://192.168.1.110:3000/users/sign_up?inviter=14658733081530 root_path /users/sign_up?inv ...

  10. 数据库连接理解——JDBC

    需求:数据库操作 数据是:用户信息 1.连接数据库  JDBC Hibernate 2.操作数据库 c create r read u update d delete 3.关闭数据库连接 interf ...