CF1548B题解
在日报上面看到的,发现 NOIP 模拟赛考过这个 trick(
首先我们把题目要求的条件这么写:
\]
那么我们要找到满足条件的数组,差分后的数组一定都是 \(m\) 的倍数,换句话说差分后的 \(\gcd\) 一定大于 \(1\)。
这里已经可以用线段树+st 表大力草了,但是显然我们并不满足于此。
我们考虑通过双指针,钦定右端点,然后移动左端点。
然后你发现不可能删掉左区间的元素,所以我们考虑用两个栈来维护这个区间。
大概就是给定了一个中点 \(mid\),然后对于 \(i \in [l,mid]\) 维护一个 \(\gcd_{k=i}^{mid}a_k\),对于 \(i \in (mid,r]\) 维护一个 \(\gcd_{k=mid+1}^i a_k\)。
于是移动左端点的时候就只需要直接 check 就好了。
当 \(l > mid\) 时,令 \(mid=r\),然后重构整个左边的栈,把右边的栈清空。
可以知道每一个元素只会被加入一次和被重构一次,所以复杂度很明显是 \(O(n\log V)\) 的。
#include<cstdio>
typedef unsigned ui;
typedef unsigned long long ull;
const ui M=2e5+5;
ui T,n;ull a[M],f[M];
inline ull gcd(const ull&a,const ull&b){
return b?gcd(b,a%b):a;
}
signed main(){
ui i,j,l,mid,ans;scanf("%u",&T);
while(T--){
scanf("%u",&n);l=mid=1;ans=0;
for(i=1;i<=n;++i)scanf("%llu",a+i),a[i-1]=a[i-1]>a[i]?a[i-1]-a[i]:a[i]-a[i-1];
for(i=1;i<n;++i){
f[i]=i==1||i-1==mid?a[i]:gcd(f[i-1],a[i]);
while(l<=mid&&gcd(f[l],f[i])==1)++l;
if(l>mid){
f[i]=a[mid=i];
for(j=i-1;j>=l;--j)f[j]=gcd(a[j],f[j+1]);
while(l<=i&&f[l]==1)++l;
}
if(i-l+1>ans)ans=i-l+1;
}
printf("%u\n",++ans);
}
}
CF1548B题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- bom-setInterval
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jdk1.5新特性之-----自动装箱与自动拆箱
import java.util.ArrayList; /* jdk1.5新特性之-----自动装箱与自动拆箱. java是面向对象 的语言,任何事物都可以使用类进行描述,sun就使用了 一些类描述j ...
- 简单实现UITableView索引功能(中英文首字母索引)(一) ByH罗
UITableView索引功能是常见的,主要是获取中英文的首字母并排序,系统自带获取首字母 //系统获取首字母 - (NSString *) pinyinFirstLetter:(NSString*) ...
- Keepalived配置与使用(1)
介绍 Keepalived是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障.一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为 ...
- x86架构中的外部中断结构-Part 1:中断控制器的演化
本文主要讲解了x86体系架构从外部设备接受中断的过程,本文是系列文章的第一部分,试图回答以下问题: 什么是PIC以及它的用途是什么? 什么是APIC以及它的用途是什么?LAPIC和I/O APIC的目 ...
- Netty高级应用及聊天室实战
Netty 高级应用 1. 编解码器 概念:在网络应用中,需要实现某种编解码器.将原始字节数据与自定义消息数据进行相互转换.网络中都是以字节码的形式传输的. 对Netty而言,编解码器由两部分组成:编 ...
- 解决POI多线程导出时数据错乱问题
项目里有一个导出功能,但随着数据量大量上涨,导出时间长到不可忍受,遂重写此接口,多线程导出的代码并不复杂,每页有一条线程负责写入,利用线程池去调度,用countdownLatch保证在所有数据写完后再 ...
- spring IOC的理解,原理与底层实现?
从总体到局部 总 控制反转:理论思想,原来的对象是由使用者来进行控制,有了spring之后,可以把整个对象交给spring来帮我们进行管理 DI(依赖注入):把对应的属性 ...
- CobaltStrike逆向学习系列(4):Beacon 上线协议分析
这是[信安成长计划]的第 4 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Beacon 发送 0x02 TeamServer 处理 0x03 流程图 0x04 参考文章 在上一篇 ...
- 正确理解jmeter线程组之Ramp-Up
Ramp-Up表示多少时间内启动线程,比如线程数100,Ramp-Up设置为10,表示10秒内启动100线程,不一定是每秒启动10个线程: 下面我们来做几个测试 线程组设置:100线程,Ramp-Up ...