CF475D:CGCDSSQ
浅谈\(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的更多相关文章
- java web 开发三剑客 -------电子书
Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知In ...
- 所有selenium相关的库
通过爬虫 获取 官方文档库 如果想获取 相应的库 修改对应配置即可 代码如下 from urllib.parse import urljoin import requests from lxml im ...
- codeforces 475D. CGCDSSQ
D. CGCDSSQ time limit per test 2 seconds memory limit per test 256 megabytes Given a sequence of int ...
- Codeforces475D - CGCDSSQ
Portal Description 给出长度为\(n(n\leq10^5)\)的序列\(\{a_n\}\),给出\(q(q\leq3\times10^5)\)个\(x\),对于每个\(x\),求满足 ...
- Bayan 2015 Contest Warm Up D. CGCDSSQ (math,pair,map,暴力)
哎,只能转题解了,,, 8165031 2014-10-10 15:53:42 njczy2010 D - CGCDSSQ GN ...
- 【CODEFORCES】 D. CGCDSSQ
D. CGCDSSQ time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- In-Memory:内存数据库
在逝去的2016后半年,由于项目需要支持数据的快速更新和多用户的高并发负载,我试水SQL Server 2016的In-Memory OLTP,创建内存数据库实现项目的负载需求,现在项目接近尾声,系统 ...
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- 【.net 深呼吸】细说CodeDom(8):分支与循环
有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...
随机推荐
- You are using pip version 8.1.2, however version 9.0.1 is available.
[root@localhost ~]# pip install virtualenvmapperCollecting virtualenvmapper Could not find a versio ...
- GitHub提示 Error: Key already in use解决办法
GitHub提示 Error: Key already in use解决办法GitHub提示 Error: Key already in use解决办法2014年09月05日 ⁄ 综合 ⁄ 共 290 ...
- Cordova 教程 学习步骤-从零基础开始
Cordova的技术交流新群
- JPA 多表分页查询
业务场景:大学生毕业后统计毕业去向.学生实体和毕业去向实体一对一关系. 实体: @Entity @Data @Table(name = "t_s_student") public ...
- 函数创建XML文件
REPORT YTST_XML_14. *----------------------------------------------------------------------* * PANT ...
- Javaweb基础--->监听器listener(转发)
JavaWeb中的监听器 1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 Servl ...
- Intel Quick Sync Video Encoder 2
这边博客主要记录在预研quick sync中涉及到的一些性能质量相关的关键参数设置. github: https://github.com/MarkRepo/qsve 1. VPP处理过程伪代码: M ...
- C#使用SQL语句时候的万用密码问题
实际上万用密码就是因为SQL里面的语句--是注释,利用bug添加用户名和密码. 例如,用户名为 adada’ or 1=1-- 第一个种写法登录成功了 第二种写法登录失败(正确) 第三种写法登录失败( ...
- html5 说明
# 客户端储存历程 远古时期 cookies的用法和缺陷 userdata HTML5时代 localstorage application cache 离线缓存 indexedeDB 客户端数据 ...
- jQuery图片水平滑动延迟加载动画
在线演示 本地下载