牛客网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区间的更多相关文章

  1. 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告

    目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...

  2. 牛客网NOIP赛前集训营-提高组(第二场)A 方差

    链接:https://www.nowcoder.com/acm/contest/173/A来源:牛客网 题目描述 一个长度为 m 的序列 b[1...m] ,我们定义它的方差为 ,其中  表示序列的平 ...

  3. [牛客网NOIP赛前集训营-提高组(第一场)]C.保护

    链接:https://www.nowcoder.com/acm/contest/172/C来源:牛客网 题目描述 C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为 ...

  4. 牛客网NOIP赛前集训营-提高组(第一场)

    牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l ...

  5. 比赛总结——牛客网 NOIP赛前集训营提高组模拟第一场

    第一场打的很惨淡啊 t1二分+前缀最小值没想出来,20分的暴力也挂了,只有10分 t2数位dp,调了半天,结果因为忘了判0的特殊情况WA了一个点,亏死 t3emmmm.. 不会 imone说是DSU ...

  6. 牛客网NOIP赛前集训营-提高组(第一场)B 数数字

    数数字 思路: 数位dp 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include< ...

  7. 牛客网NOIP赛前集训营-提高组(第一场)A 中位数

    中位数 思路: 二分答案 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include< ...

  8. 牛客网NOIP赛前集训营 提高组 第5场 T2 旅游

    [题解] 我们可以发现不在最小生成树上的边一定不能多次经过,因为一条不在最小生成树上的边(u,v)的边权比最小生成树上(u,v)之间的路径更长,选择不在最小生成树上的边一定不划算. 我们还需要确定最小 ...

  9. 牛客网NOIP赛前集训营-提高组(第四场)游记

    牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...

随机推荐

  1. Python binascii

    Python binascii模块 Python binascii模块 用处 包含的函数 相关内置函数 code使用示例 转载请标明出处(http://blog.csdn.net/lis_12/art ...

  2. java的static块及相关内容

    原文地址:http://blog.csdn.NET/lubiaopan/article/details/4802430     感谢原作者! static{}(即static块),会在类被加载的时候执 ...

  3. [BAT] 通过批处理加host

    echo. >> %WINDIR%\system32\drivers\etc\hosts & echo xxx.xxx.xxx.xx test_host >> %WIN ...

  4. 基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证

    基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证 摘自:https://blog.csdn.net/ty1121466568/article/details/811184 ...

  5. CSS选择器种类及介绍

    首先说主都有哪些先择器 1.标签选择器(如:body,div,p,ul,li) 2.类选择器(如:class="head",class="head_logo") ...

  6. 实践作业3:白盒测试----总结与反思DAY12.

    ---恢复内容开始--- 阶段一:熟悉白盒测试方法 负责人:刘思佳 工作质量评价:用例设计详细,考虑到白盒测试基于代码,所以尽可能地覆盖更多的白盒测试方法,对系统可能存在的缺陷就更容易了解.对管理员和 ...

  7. Perl语言编程>>学习笔记2

    1. Perl中变量的常用表示  ${var} 相当于 $var  $Dog::days  在Dog包里面的变量$days  $#days  @days 的最后一个索引  ]  $days 引用的数组 ...

  8. Spring5源码解析-论Spring DispatcherServlet的生命周期

    Spring Web框架架构的主要部分是DispatcherServlet.也就是本文中重点介绍的对象. 在本文的第一部分中,我们将看到基于Spring的DispatcherServlet的主要概念: ...

  9. list 返回列表null替换

    function formatt(rec, val, index) { if (rec === null || rec == "null") { return "0&qu ...

  10. ConfigureAwait(false)避免上下文延续

    之前MVC利用MvcHtmlString封装通用下拉菜单,菜单数据需要从webapi获取,自然用到了 await Http Client.GetAsync(Url)方法,前端 @Html.Select ...