牛客网NOIP赛前集训营-提高组(第四场)B区间
牛客网NOIP赛前集训营-提高组(第四场)B区间
题目描述
给出一个序列$ a_1\ \ \dots\ \ a_n$。
定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 \(a_i\) 恰好等于 \(a_l, a_{l+1} \ \ \dots \ \ a_{r-1}, a_r\) 的最大公因数。
求最长的好的区间的长度。
输入描述:
第一行 n,表示序列的长度;
第二行 n 个数 a1,a2,...,an。
输出描述:
输出一行一个数,表示最长的好的区间的长度。
乱搞就行,考试的时候睡了一觉就想出来了
用\(f[i]\) 表示前面第一个能被\(a[i]\)整除的位置
用\(g[i]\) 表示后面第一个能被\(a[i]\)整除的位置
则可以递推
f[1]=1;
for(int i=2;i<=n;++i){
if(a[i]%a[f[i-1]]==0)f[i]=f[i-1];
else f[i]=i;
}
g[n]=n;
for(int i=n-1;i;--i){
if(a[i]%a[g[i+1]]==0)g[i]=g[i+1];
else g[i]=i;
}
最后在\(f\)和\(g\)里面连续的一段取最长的就行了
但是如果有这种数据:
5
10 6 6 6 9
我们写出\(f\)和\(g\):
f: 1 2 2 2 5
g: 1 4 4 4 5
发现有重复数字时位置会不一样
所以再用两个数组\(l[i]\)和\(r[i]\)乱搞一下
for(int i=1;i<=n;++i)
r[f[i]]=max(r[f[i]],i),
l[g[i]]=min(l[g[i]],i);
for(int i=1;i<=n;++i)
r[i]=max(r[i],r[f[i]]),
l[i]=min(l[i],l[g[i]]);
for(int i=1;i<=n;++i)ans=max(ans,r[i]-l[i]+1);
注意卡读入,用fread或者ios和tie优化都行
然后就没有然后了
可能我的思路比较别致
#include<bits/stdc++.h>
using namespace std;
const int maxn = 4e6+5;
#define int long long
char getc(){
static char buf[maxn],*p1=buf,*p2=buf;
return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,maxn,stdin),p1==p2)? EOF:*p1++;
}
int mian(){
int s=0,f=1;char ch;
while(!isdigit(ch=getc()))(ch=='-')&&(f=-1);
for(s=ch-'0';isdigit(ch=getc());s=s*10+ch-'0');
return s*f;
}
int a[maxn],n,f[maxn],g[maxn],ans,l[maxn],r[maxn];
signed main(){
n=mian();
for(int i=1;i<=n;++i)a[i]=mian(),l[i]=r[i]=i;
f[1]=1;
for(int i=2;i<=n;++i){
if(a[i]%a[f[i-1]]==0)f[i]=f[i-1];
else f[i]=i;
}
g[n]=n;
for(int i=n-1;i;--i)
if(a[i]%a[g[i+1]]==0)g[i]=g[i+1];
else g[i]=i;
for(int i=1;i<=n;++i)
r[f[i]]=max(r[f[i]],i),
l[g[i]]=min(l[g[i]],i);
for(int i=1;i<=n;++i){
r[i]=max(r[i],r[f[i]]),
l[i]=min(l[i],l[g[i]]);
}
for(int i=1;i<=n;++i)ans=max(ans,r[i]-l[i]+1);
cout<<ans<<endl;
return 0;
}
让我们一起膜拜大佬@olinr
牛客网NOIP赛前集训营-提高组(第四场)B区间的更多相关文章
- 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告
目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...
- 牛客网NOIP赛前集训营-提高组(第二场)A 方差
链接:https://www.nowcoder.com/acm/contest/173/A来源:牛客网 题目描述 一个长度为 m 的序列 b[1...m] ,我们定义它的方差为 ,其中 表示序列的平 ...
- [牛客网NOIP赛前集训营-提高组(第一场)]C.保护
链接:https://www.nowcoder.com/acm/contest/172/C来源:牛客网 题目描述 C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为 ...
- 牛客网NOIP赛前集训营-提高组(第一场)
牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l ...
- 比赛总结——牛客网 NOIP赛前集训营提高组模拟第一场
第一场打的很惨淡啊 t1二分+前缀最小值没想出来,20分的暴力也挂了,只有10分 t2数位dp,调了半天,结果因为忘了判0的特殊情况WA了一个点,亏死 t3emmmm.. 不会 imone说是DSU ...
- 牛客网NOIP赛前集训营-提高组(第一场)B 数数字
数数字 思路: 数位dp 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include< ...
- 牛客网NOIP赛前集训营-提高组(第一场)A 中位数
中位数 思路: 二分答案 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include< ...
- 牛客网NOIP赛前集训营 提高组 第5场 T2 旅游
[题解] 我们可以发现不在最小生成树上的边一定不能多次经过,因为一条不在最小生成树上的边(u,v)的边权比最小生成树上(u,v)之间的路径更长,选择不在最小生成树上的边一定不划算. 我们还需要确定最小 ...
- 牛客网NOIP赛前集训营-提高组(第四场)游记
牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...
随机推荐
- LIN通讯
1.定义 LIN(Local Interconnect Network)总线是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议.其目标定位于车身网络模块节点间的低端通信,主要用于智 ...
- shell if,case,for,while语法
#shell if的语法 if [空格 xxx 空格] then echo xxxxx exit 1/2/3/4/.... 0表示正确. elif [空格 xxx 空格] then echo xxxx ...
- 20-list简单使用:
C++list的使用总结及常用list操作 C++中list用法详解 STL中list的erase()方法的使用 listiterator 最近刚刚接触stl的list 学习的时候遇到了很多 ...
- git 常用commands(转)
常用 Git 命令清单 作者: 阮一峰 日期: 2015年12月 9日 我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60- ...
- Android代码速查,写给新手的朋友们[转]
原文地址:http://www.open-open.com/lib/view/open1397286499090.html 0 android 创建按钮 Button button = new But ...
- EZOJ #226
传送门 分析 我们可以建一个k层图,把dp转移的三维对应到每个点上,每个第k层点连向0层点 我们让第0层点为实点其余为虚点,只要碰到虚点就dfs到他连得所有实点再将实点入队即可 代码 #include ...
- scrapy定制爬虫-爬取javascript——乾颐堂
很多网站都使用javascript...网页内容由js动态生成,一些js事件触发的页面内容变化,链接打开.甚至有些网站在没有js的情况下根本不工作,取而代之返回你一条类似"请打开浏览器js& ...
- jqgrid 单元格放超链接文本
.前台 <%-- builed by manage.aspx.cmt [ver:] at // :: --%> <%@ Page Language="C#" Au ...
- java中List的用法和实例详解
java中List的用法和实例详解 List的用法List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供 ...
- 实践作业4:Web测试实践(小组作业)每日任务记录2
实践作业4:Web测试实践(小组作业)每日任务记录2 会议时间:2017年12月22日 会议地点:东九教学楼自习区 主 持 人:王晨懿 参会人员:王晨懿.余晨晨.郑锦波.杨潇.侯欢.汪元 记 录 ...