[BZOJ 4921][Lydsy1706月赛]互质序列
因为区间 gcd 的变换不会超过 log 个,所以我们可以暴力枚举区间起点,复杂度是 n*logn 的
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define fd(i,a,b) for(int i=a;i>=b;--i)
,mod=;
template <typename T> bool check_Max(T &x, const T&y) {return x<y?x=y,false:true;}
template <typename T> bool check_Min(T &x, const T&y) {return x>y?x=y,false:true;}
inline int gi() {
; char o; bool f=true; for(;!isdigit(o=getchar());) if(o=='-') f=false;
)+(x<<)+(o&); ;
}
template <typename T> inline void Md(T &x) {if(x>=mod) x-=mod;}
int gcd(int x,int y) { return x?gcd(y%x,x):y;}
int gd1[maxn],gd2[maxn],nt[maxn],a[maxn],n,ans;
int main() {
#ifndef ONLINE_JUDGE
freopen("10.in","r",stdin);
#endif
n=gi(); rep(i,,n) gd1[i]=gd2[i]=a[i]=gi();
rep(i,,n) gd1[i]=gcd(gd1[i-],gd1[i]); fd(i,n-,) gd2[i]=gcd(gd2[i+],gd2[i]);
rep(i,,n) nt[i]=gd2[i]==gd2[i-]?nt[i-]:i-;
rep(i,,n) {
]; ) Md(ans+=pos%mod);
int L=n;
while(L>i) {
,nt[L]+); pos=gcd(pos,gd2[R]);
// printf("i=%d L=%d R=%d pos=%d--\n",i,L,R,pos);//de bug
Md(ans+=1LL*pos*(L-R+)%mod); L=R-;
}
}
,R,pos=gd2[L];
) {
R=max(,nt[L]+),pos=gd2[R];
// peintf("L=%d R=%d pos=%d\n",L,R,pos); //de bug
Md(ans+=1LL*pos*(L-R+)%mod); L=R-;
}
printf("%d\n",ans);
;
}
今天的水题计划就到这里了,顺带提一句,今天S8世界总决赛 小组赛IG vs GRX时Stitch 的反向Q,连皮肤都和当年韦神的一样
放个图感受一下


[BZOJ 4921][Lydsy1706月赛]互质序列的更多相关文章
- bzoj 4921: [Lydsy六月月赛]互质序列
4921: [Lydsy六月月赛]互质序列 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 188 Solved: 110[Submit][Status ...
- 【bzoj4921】[Lydsy六月月赛]互质序列 暴力
题目描述 给出一个序列,要求删除一段非空区间,使得剩下的数的个数大于等于2.求所有删除方式剩下的数的最大公约数的和. 输入 第一行包含一个正整数n(3<=n<=100000),表示序列的长 ...
- 数据结构_coprime_sequence(互质序列)
coprime_sequence(互质序列) 问题描述 顾名思义,互质序列是满足序列元素的 gcd 为 1 的序列.比如[1,2,3],[4,7,8],都是互质序列. [3,6,9]不是互质序列.现在 ...
- BZOJ4921「Lydsy1706月赛」互质序列
吐槽一下BZOJ没有C++11 题还是不难的 BZOJ 4921 题意 在长度为$ n$的数列中去掉非空的连续一段并保证剩下数字不少于$ 2$ 求合法的所有方案中剩下数字的最大公约数的总和 $Sol ...
- bzoj 4919 [Lydsy1706月赛]大根堆 set启发式合并+LIS
4919: [Lydsy1706月赛]大根堆 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 599 Solved: 260[Submit][Stat ...
- Codeforces 959 树构造 暴力求最小字典序互质序列
A B C 题目给你一个结论 最少需要min((odd,even)个结点可以把一棵树的全部边连起来 要求你输出两颗树 一棵树结论是正确的 另外一棵结论是正确的 正确结论的树很好造 主要是错误的树 题目 ...
- BZOJ 4919: [Lydsy1706月赛]大根堆 set启发式合并
这个和 bzoj 5469 几乎是同一道题,但是这里给出另一种做法. 你发现你要求的是一个树上 LIS,而序列上的 LIS 有一个特别神奇的 $O(n\log n) $ 做法. 就是维护一个单调递增的 ...
- BZOJ.4919.[Lydsy1706月赛]大根堆(线段树合并/启发式合并)
题目链接 考虑树退化为链的情况,就是求一个最长(严格)上升子序列. 对于树,不同子树间是互不影响的.仿照序列上的LIS,对每个点x维护一个状态集合,即合并其子节点后的集合,然后用val[x]替换掉第一 ...
- BZOJ 4919 [Lydsy1706月赛]大根堆 (SRM08 T3)
[题解] 求一个序列的LIS有一个二分做法是这样的:f[i]表示长度为i的上升序列中最后一个数最小可以是多少,每次二分大于等于当前数字x的f[j],把f[j]修改为x:如果找不到这样的f[j],那就把 ...
随机推荐
- Linux ag命令
一.简介 Ag是用C++写的,搜索速度快,比grep更有效率. 二.安装 RHEL7+ rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x8 ...
- 关于C++中不同类之间的赋值问题——存疑
operator=不能重载为全局函数.理由如下 void operator=(int i , A& a) { a.a = i } ; 那么将会出现 99 = a 这种代码,但是99不是左值, ...
- spring boot返回Josn的两种方式
1.Controller类上加@RestController注解 2.Controller类上加@Controller注解,Action接口上加@ResponseBody注解 @Responsebod ...
- Android 内存优化[转]
一. Android的内存机制 Android的程序由Java语言编写,所以Android的内存管理与Java的内存管理相似.程序员通过new为对象分配内存,所有对象在java堆内分配空间:然而对象的 ...
- ping别的电脑出错
原因ifconfig 电脑1:172.31.45.101 电脑2:172.31.188.232 http://ask.csdn.net/questions/178358 如何防止别人ping自己的电脑 ...
- VS中ashx文件关键字没有高亮标记的解决办法
VS --- 工具 --- 选项 --- 文本编辑器 --- 文件扩展名,只要在右侧添加 ashx ,选中MS-VS c# 保存后
- js调试工具Console命令详解——转
一.显示信息的命令 <!DOCTYPE html> <html> <head> <title>常用console命令</title> < ...
- 分布式缓存系统Memcached简介与以及在.net下的实践(转)
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...
- strncmp用法说明
函数原型 int strcmp(char *str1,char * str2,int n) 功能 比较字符串str1和str2的前n个字符. 头文件 #include <string.h> ...
- struts2的validate输入验证
原创 struts2的输入验证有两种方式: 使用validate()方法实现验证 使用验证文件实现验证 下面通过一个例子介绍validate()方法验证——实现客户注册输入验证 设计的JSP页面代码: ...