即求删掉一个子序列的gcd之和。注意到前后缀gcd的变化次数都是log级的,于是暴力枚举前缀gcd和后缀gcd即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 100010
#define P 998244353
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,a[N],prepos[N],prenum[N],precnt,sufpos[N],sufnum[N],sufcnt,ans;
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4921.in","r",stdin);
freopen("bzoj4921.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read();
for (int i=;i<=n;i++) a[i]=read();
prepos[]=;
for (int i=;i<=n;i++)
if (gcd(a[i],prenum[precnt])!=prenum[precnt]) precnt++,prepos[precnt]=i,prenum[precnt]=gcd(a[i],prenum[precnt-]);
prepos[precnt+]=n+;
sufpos[]=n+;
for (int i=n;i>=;i--)
if (gcd(a[i],sufnum[sufcnt])!=sufnum[sufcnt]) sufcnt++,sufpos[sufcnt]=i,sufnum[sufcnt]=gcd(a[i],sufnum[sufcnt-]);
sufpos[sufcnt+]=;
for (int i=;i<=precnt;i++)
for (int j=;j<=sufcnt;j++)
{
int x=gcd(prenum[i],sufnum[j]);
for (int k=prepos[i];k<prepos[i+];k++)
ans=(ans+1ll*x*max(,sufpos[j]-max(sufpos[j+],k+))%P)%P;
}
ans-=a[],ans-=a[n];while (ans<) ans+=P;
cout<<ans;
return ;
}

BZOJ4921 互质序列的更多相关文章

  1. 数据结构_coprime_sequence(互质序列)

    coprime_sequence(互质序列) 问题描述 顾名思义,互质序列是满足序列元素的 gcd 为 1 的序列.比如[1,2,3],[4,7,8],都是互质序列. [3,6,9]不是互质序列.现在 ...

  2. bzoj 4921: [Lydsy六月月赛]互质序列

    4921: [Lydsy六月月赛]互质序列 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 188  Solved: 110[Submit][Status ...

  3. Codeforces 959 树构造 暴力求最小字典序互质序列

    A B C 题目给你一个结论 最少需要min((odd,even)个结点可以把一棵树的全部边连起来 要求你输出两颗树 一棵树结论是正确的 另外一棵结论是正确的 正确结论的树很好造 主要是错误的树 题目 ...

  4. 【bzoj4921】[Lydsy六月月赛]互质序列 暴力

    题目描述 给出一个序列,要求删除一段非空区间,使得剩下的数的个数大于等于2.求所有删除方式剩下的数的最大公约数的和. 输入 第一行包含一个正整数n(3<=n<=100000),表示序列的长 ...

  5. BZOJ4921「Lydsy1706月赛」互质序列

    吐槽一下BZOJ没有C++11  题还是不难的 BZOJ 4921 题意 在长度为$ n$的数列中去掉非空的连续一段并保证剩下数字不少于$ 2$ 求合法的所有方案中剩下数字的最大公约数的总和 $Sol ...

  6. [BZOJ 4921][Lydsy1706月赛]互质序列

    传送门 因为区间 gcd 的变换不会超过 log 个,所以我们可以暴力枚举区间起点,复杂度是 n*logn 的 #include <bits/stdc++.h> using namespa ...

  7. HDU5668 Circle 非互质中国剩余定理

    分析:考虑对给定的出圈序列进行一次模拟,对于出圈的人我们显然可以由位置,编号等关系得到一个同余方程 一圈做下来我们就得到了n个同余方程 对每个方程用扩展欧几里得求解,最后找到最小可行解就是答案. 当然 ...

  8. hdoj1014 互质

    Uniform Generator Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  9. 求一个区间里的一个x,这个x与这区间里面的所有数都互质

    链接:https://ac.nowcoder.com/acm/contest/301/H来源:牛客网 题描述 小乐乐上了一节数学课,数学老师讲的很好,小乐乐听的也如痴如醉. 小乐乐听了老师的讲解,知道 ...

随机推荐

  1. 人脸识别引擎SeetaFaceEngine中Detection模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Detection模块用于人脸检测,以下是测试代码: int test_detection() { std::vector<std::string&g ...

  2. 解决老项目中 Timer运行一段时间后失效的问题

    那是因为Timer中的代码出现了异常未被捕获,所以线程被挂起 只需要加入  try catch即可 推荐使用 Quartz 2018-08-08 03:50:44 [ Timer-1:39366015 ...

  3. Linux查看文件内容

    查看文件内容的命令: cat:连接文件并且打印在标准输出 tac:连接并且倒序打印文件 more:屏幕文件熟读过滤器 less head:输出文件的第一部分 tail:输出文件最后的部分 nl:输出文 ...

  4. nginx交替出现404和200

    今天在调试接口的时候,发现一个奇怪的问题,服务器接口交替返回404和200错误. 排查的时候发现nginx下有大量的404错误记录,而tomcat有两个,一个有正常的访问记录,而另一个虽然启动正常,但 ...

  5. JY播放器【网易云音乐破解下载】

    今天给大家带来一款神器----JY播放器.可以直接下载网易云音乐的歌曲. 目前已经支持平台(蜻蜓FM.喜马拉雅FM.网易云音乐.QQ音乐) 使用方法: 在电脑打开网易云音乐或者网站找到你要听的歌曲或歌 ...

  6. JAVA基础学习之路(十一)引用传递

    引用传递: 不同栈内存可以指向同一块堆内存,不同栈内存可以对一块堆内存进行修改 范例一: class Message { private int num = 10; public Message(in ...

  7. [转载]linux+nginx+python+mysql安装文档

    原文地址:linux+nginx+python+mysql安装文档作者:oracletom # 开发包(如果centos没有安装数据库服务,那么要安装下面的mysql开发包) MySQL-devel- ...

  8. Codeforces Round #553 (Div. 2) C

    C. Problem for Nazar time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. RNN: Feed Forward, Back Propagation Through Time and Truncated Backpropagation Through Time

    原创作品,转载请注明出处哦~ 了解RNN的前向.后向传播算法的推导原理是非常重要的,这样, 1. 才会选择正确的激活函数: 2. 才会选择合适的前向传播的timesteps数和后向传播的timeste ...

  10. 用js两张图片合并成一张图片

    JS和canvas的合成方式 function drawAndShareImage(){ var canvas = document.createElement("canvas") ...