codeforces 475D CGCDSSQ (st表+数论)
来源:互联网 发布:网络对战游戏排行 编辑:程序博客网 时间:2024/05/01 14:07
题解:st表+数论
可以用st表预处理出区间gcd,然后O(1)查询。
我们考虑枚举左端点,随着右端点的后移,区间gcd最多变化log(n)次,因为每次变化gcd都至少要减小一半,所以显然。
那么我们可以枚举左端点,然后二分gcd每次变化的位置,用map记录答案。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<map>#define N 300003#define LL long longusing namespace std;int n,m,f[N][20],l[N];map<int,LL> ans;int a[N];int gcd(int x,int y){int r;while (y){r=x%y;x=y;y=r;}return x;}void solve(){for (int i=1;i<=n;i++) f[i][0]=a[i];for (int j=1;j<=17;j++) for (int i=1;i<=n;i++) if (i+(1<<j)-1<=n) f[i][j]=gcd(f[i][j-1],f[i+(1<<(j-1))][j-1]);int j=0;for (int i=1;i<=n;i++){if ((1<<(j+1))<=i) j++;l[i]=j;}}int calc(int x,int y){int k=l[y-x];return gcd(f[x][k],f[y-(1<<k)+1][k]);}int work(int pos,int l,int r,int x){int ans=r+1;while (l<=r) {int mid=(l+r)/2;if (calc(pos,mid)!=x) ans=min(ans,mid),r=mid-1;else l=mid+1;}if (ans==r) return ans; return ans-1;}int main(){freopen("a.in","r",stdin);scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%d",&a[i]);solve();for (int i=1;i<=n;i++) {int now=a[i]; int x=i;while (true) {int last=x;x=work(i,last,n,now); now=calc(i,x);ans[now]+=x-last+1;if (x>=n) break;x++; now=calc(i,x);}}scanf("%d",&m);for (int i=1;i<=m;i++) {int x; scanf("%d",&x);cout<<ans[x]<<endl;}}
0 0
- codeforces 475D CGCDSSQ (st表+数论)
- codeforces 475D CGCDSSQ ST表+二分
- [Codeforces#475D]CGCDSSQ(st表+二分+数学相关)
- 【codeforces】 475D CGCDSSQ
- Codeforces 475 D. CGCDSSQ
- CodeForces 475D CGCDSSQ
- CodeForces 475D CGCDSSQ
- CodeForces 475D CGCDSSQ RMQ
- Codeforces 475D CGCDSSQ 题解
- 【CODEFORCES】 D. CGCDSSQ
- Bayan 2015 Contest Warm Up D. CGCDSSQ (数论)
- CF - 475 - D. CGCDSSQ(枚举)
- 【并查集分块】Codeforces 475D CGCDSSQ
- CF 475D CGCDSSQ 解题报告(DP)
- codeforces 689D ST表+二分 模板
- Codeforces 475D CGCDSSQ 求序列中连续数字的GCD=K的对数
- CF 475D CGCDSSQ 枚举,思维+gcd
- CodeForces 615 D. Multipliers(数论)
- codevs 3301 Square words 题解报告
- 解决kafka Unrecognized VM option 'UseCompressedOops'问题
- 碎碎念
- 三大移动运营商手机号段大全 附手机号正则表达式
- 一个显示等级进度的控件,可以自定义等级值、颜色、游标等。
- codeforces 475D CGCDSSQ (st表+数论)
- MyBatis
- jvm学习笔记
- VR、AR、MR 概念入门
- org.apache.axis.ConfigurationException: No service named XXX is available
- Mysql中的Btree与Hash索引方式
- PDO类使用
- ios 引导页/半透明引导页做法
- 海量数据存储之Key-Value存储简介