纪中OJ 2019.01.25【NOIP提高组】模拟 B 组 T2 数字对
她的面前浮现出一个长度为 n 的序列 {ai},她想找出一段区间 [L, R] (1 <= L <= R <= n)。
这个特殊区间满足,存在一个 k (L <= k <= R),并且对于任意的 i (L <= i <= R),ai 都能被 ak 整除。这样的一个特殊区间 [L, R] 价值为 R - L。
小H想知道序列中所有特殊区间的 最大价值 是多少,而有多少个这样的区间呢?这些区间又分别是哪些呢?你能帮助她吧。
Input
第二行,n 个整数,代表 ai.
Output
第二行 num 个整数,按升序输出每个价值最大的特殊区间的 L.
Data Constraint
60%: 1 <= n <= 3000 , 1 <= ai <= 1024.
80%: 1 <= n <= 300000 , 1 <= ai <= 1048576.
100%: 1 <= n <= 500000 , 1 <= ai < 2 ^ 31.
最近发现有用暴力等水法A掉这题的,如从头到尾枚举 ak ,然后再向两边搜索的水法。
然而如果所有的 ai 都相同的话,时间复杂度就为O(n2),完全过不了。
如:
500000
后面 500000 个 1
此时时间复杂度为O(5000002),不知道运行到猴年马月,直接卡掉水法。
接下来看正解(可能有其他更简单的方法,但这种方法绝对不会被卡掉!): 二分+rmq+hash
uses math;
const
mo=;
var
l,r,mid,i,n,j,t,cnt:longint;
a,b,h,ans:array[..] of longint;
rmq:array[..,..] of longint;
function gcd(x,y:longint):longint;
begin
if y= then exit(x) else exit(gcd(y,x mod y));
end;
function hash(x,mode:longint):boolean;
var
k:longint;
begin
k:=x mod mo;
while (h[k]<>) and (h[k]<>x) do
begin
inc(k);
if k>mo then k:=;
end;
if mode= then cnt:=k else
if mode= then h[k]:=x else
if h[k]=x then exit(true) else exit(false);
end;
function check(x:longint):boolean;
var
l,t,j,flag,r:longint;
begin
fillchar(h,sizeof(h),);
for i:= to x do
hash(a[i],);
flag:=;
for l:= to n-x+ do
begin
hash(a[l-],);
h[cnt]:=;
r:=l+x-;
hash(a[r],);
t:=trunc(ln(r-l+)/ln());
j:=gcd(rmq[l,t],rmq[r-(<<t)+,t]);
if hash(j,) then
begin
flag:=;
inc(ans[x]);
b[ans[x]]:=l;
end;
end;
if flag= then exit(false) else exit(true);
end;
begin
readln(n);
for i:= to n do
begin
read(a[i]);
rmq[i,]:=a[i];
end;
readln;
t:=trunc(ln(n)/ln())+;
for j:= to t do
for i:= to n do
if i+(<<j)-<=n then
rmq[i,j]:=gcd(rmq[i,j-],rmq[i+(<<(j-)),j-]);
l:=; // l,r,mid 存的是区间长度
r:=n;
while l<r do
begin
mid:=(l+r) div +;
if check(mid) then l:=mid else r:=mid-;
end;
if ans[l]= then
begin
writeln(n,'');
for i:= to n- do
write(i,' ');
writeln(n);
halt;
end;
writeln(ans[l],' ',l-); //要输出价值,就是长度-
for i:= to ans[l]- do
write(b[i],' ');
writeln(b[ans[l]]);
end.
标程
纪中OJ 2019.01.25【NOIP提高组】模拟 B 组 T2 数字对的更多相关文章
- 纪中OJ 2019.02.15【NOIP提高组】模拟 B 组 梦回三国 比赛题解(第一个)
声明 旁边的同学小 H(胡)对我说: “哟,比赛拿了 140,强!要知道,如果哥第三题 AC 了,哥就 230 了,你个废柴!!!(比赛实际分数 130 额呵)” 顿时,千万草泥马从我心中奔腾而过:你 ...
- 【纪中集训】2019.08.01【NOIP提高组】模拟 A 组TJ
T1 Description 给定一个\(N*N(N≤8)\)的矩阵,每一格有一个0~5的颜色.每次可将左上角的格子所在连通块变为一种颜色,求最少操作数. Solution IDA*=启发式迭代加深 ...
- IntelliJ IDEA 2018.3.3配置 Tomcat 9,控制台出现中文乱码 “淇℃伅”(2019/01/25)
(win10系统) 全新idea配置全新版本Tomcat突遇 “淇℃伅”,网上大部分解决方案均已失效 似乎是idea与Tomcat命令行输出格式不一致所致,千辛万苦在某一小角落发现这个方法,一针见血, ...
- 【纪中集训2019.3.27】【集训队互测2018】小A的旅行(白)
题目 描述 \(0-n-1\)的图,满足\(n\)是\(2\)的整数次幂, $ i \to j $ 有 $ A_{i,j} $ 条路径: 一条路径的愉悦值定义为起点和终点编号的\(and\)值 ...
- 【纪中集训2019.3.23】Deadline
题意 描述 一个二分图\((A,B)\),每个点额外有一个颜色0或者1: 匹配时,只能相同颜色的点匹配: 给出\(A\)中的颜色,问如何分配\(B\)种的颜色使得\((A,B)\)的最大匹配最小: 范 ...
- 【纪中集训2019.3.12】Z的礼物
题意 已知\(a_{i} = \sum_{j=1}^{i} \{^{i} _{j} \}b_{j}\), 给出\(a_{1} 到 a_{n}\) : 求\(b_{l} 到 b_{r}\)在\(1e9+ ...
- 【纪中集训2019.3.12】Mas的仙人掌
题意: 给出一棵\(n\)个点的树,需要加\(m\)条边,每条边脱落的概率为\(p_{i}\) ,求加入的边在最后形成图中仅在一个简单环上的边数的期望: \(1 \le n \ , m \le 1 ...
- 【2019.7.25 NOIP模拟赛 T3】树(tree)(dfs序列上开线段树)
没有换根操作 考虑如果没有换根操作,我们该怎么做. 我们可以求出原树的\(dfs\)序列,然后开线段树维护. 对于修改操作,我们可以倍增求\(LCA\),然后在线段树上修改子树内的值. 对于询问操作, ...
- 【2019.7.25 NOIP模拟赛 T1】变换(change)(思维+大分类讨论)
几个性质 我们通过推式子可以发现: \[B⇒AC⇒AAB⇒AAAC⇒C\] \[C⇒AB⇒AAC⇒AAAB⇒B\] 也就是说: 性质一: \(B,C\)可以相互转换. 则我们再次推式子可以发现: \[ ...
随机推荐
- plsql连接12cR2 PDB报错ORA-28040/ORA-01017
http://hbxztc.blog.51cto.com/1587495/1907533 PS: 在数据库服务器上的oracle/network/admin/sqlnet.ora文件添加一行SQLNE ...
- 为Linux设置IPTables防火墙
我们 来讨论一下如何为你的CentOS 服务器来设置简单的防火墙. 这里我们以DigitalOcean的CentOS 6 VPS为基础来讨论的,同样也适用于 阿里云上其他类型的LINUX系统. (阿里 ...
- PHP修改图片
这篇是关于修改图片的效果,主要还是用到php中的GD库中的函数,没想到php还有这凶残能力,出乎我的预料. 先看代码upload_image.php,主要是一个上传控件,用来选择图片 <html ...
- ZT 感触的屌丝职场记 投递人 itwriter 发布于 2013-05-27 09:21 评论(18) 有3402人阅读 原文链接 [收藏] « » 作者@幻想哥呀幻想哥 有一位屌丝男,从小抱着报效祖国的理想上了大学,毕业后干了 IT 行业,高中那时候看文汇报说,搞 IT 的在上
屌丝职场记 投递人 itwriter 发布于 2013-05-27 09:21 评论(18) 有3402人阅读 原文链接 [收藏] « » 作者@幻想哥呀幻想哥 有一位屌丝男,从小抱着报效祖国的 ...
- extern “C”
http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html 问题:extern “C” 在C++环境下使用C函数的时候,常常 ...
- 对deferred(延迟对象)的理解
deferred对象从jQuery 1.5.0开始引入 什么是defrred对象 开发网站过程中,我们经常遇到某些耗时长的JS操作,其中,既有异步操作(如Ajax读取服务器数据),也有同步的操作(如遍 ...
- ethereumjs/ethereumjs-blockchain-1-简介和API
https://github.com/ethereumjs/ethereumjs-blockchain SYNOPSIS概要 A module to store and interact with b ...
- 解密蓝牙mesh系列
解密蓝牙mesh系列 https://mp.weixin.qq.com/s/KdVhkgcmHIboA0xPFqFCgQ 1.NRF52832 & NRF52840 BLE mesh 协议栈 ...
- Mysql实现主从同步
根据网上众多参考案例,继续在VM虚拟机里实现MySQL主从同步功能.步骤如下: * 首先明确下环境 主库本地windows ip192.168.0.103 从库虚拟机mysql5.6 ip192.16 ...
- java SSM 框架 多数据源 代码生成器 websocket即时通讯 shiro redis 后台框架源码
A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单; 技 ...