description


analysis

  • 这题出的失败在只卡正解不卡暴力

  • 比较好想的方法是枚举约数,向两边二分,但是这个不满足二分性

  • 首先用\(ST\)表维护区间的\(\gcd\),不用线段树,这样查询就是\(O(\log_2(\max_{i=1}^{n} a_i))\)

  • 然后照上面的方法做就行了,枚举约数,向左右二分,判断区间\(\gcd\)是否等于当前约数

  • 时间复杂度\(O(n\log_2n)\)乘\(32\)的常数,注意卡常比如预处理出\(\log\)的值


code

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 500005
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i) using namespace std; ll f[MAXN][20],g[MAXN];
ll a[MAXN],ans[MAXN],LOG[MAXN];
ll n,mx,tot,cnt; inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
inline ll query_gcd(ll l,ll r)
{
ll k=LOG[r-l+1];
return gcd(f[l][k],f[r+1-(1<<k)][k]);
}
int main()
{
freopen("T2.in","r",stdin);
//freopen("point.in","r",stdin);
//freopen("point.out","w",stdout);
n=read(),LOG[0]=-1;
fo(i,1,n)a[i]=f[i][0]=read(),LOG[i]=LOG[i>>1]+1;
fo(j,1,LOG[n])fo(i,1,n+1-(1<<j))
f[i][j]=gcd(f[i][j-1],f[i+(1<<(j-1))][j-1]);
fo(i,1,n)
{
ll l=1,r=i,mid,tmp;
while (l<=r)
{
mid=(l+r)>>1;
query_gcd(mid,i)==a[i]?r=mid-1:l=mid+1;
}
tmp=l,l=i,r=n;
while (l<=r)
{
mid=(l+r)>>1;
query_gcd(i,mid)==a[i]?l=mid+1:r=mid-1;
}
if (r-tmp>mx){mx=r-tmp,ans[tot=1]=tmp;}
else if (r-tmp==mx)ans[++tot]=tmp;
}
sort(ans+1,ans+tot+1);ll i=1;
while (i<=tot)
{
g[++cnt]=ans[i];
while (ans[i]==ans[i+1] && i<=n)++i;
++i;
}
printf("%lld %lld\n",cnt,mx);
fo(i,1,cnt)printf("%lld ",g[i]);
return 0;
}

【JZOJ6294】动态数点的更多相关文章

  1. NOIp2018集训test-10-4/test-10-5 (联考四day1/day2)

    这个day1稍微有点毒瘤吧?? DAY1 排列 以前总是把day1t1想太复杂了翻车,差不多往正解的方向想了一下感觉不可能这么复杂这可是noipday1t1啊一定有非常简单的方法然后翻车了?? 题目转 ...

  2. JZOJ 2020.10.6 提高B组反思

    JZOJ 2020.10.6 提高B组反思 T1 NYG的动态数点 最简单的一题 很容易想到\(O(n)\)的做法 枚举最小的那个数,即\(a_k\) 然后向左和向右扩展 然后可以直接从右端点+1继续 ...

  3. bzoj3295: [Cqoi2011]动态逆序对 三维数点

    为了便于考虑,把删除反序变为增加 于是就变成关于权值和位置和时间的三维数点 一波cdq一波树状数组教做人 (神TM需要longlong,80了一发) #include <bits/stdc++. ...

  4. hdu 5398 动态树LCT

    GCD Tree Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  5. 动态 DP 学习笔记

    不得不承认,去年提高组 D2T3 对动态 DP 起到了良好的普及效果. 动态 DP 主要用于解决一类问题.这类问题一般原本都是较为简单的树上 DP 问题,但是被套上了丧心病狂的修改点权的操作.举个例子 ...

  6. bzoj3262陌上花开 三维数点 cdq+树状数组

    大早上的做了一道三维数点一道五位数点,神清气爽! 先给一维排序,变成一个奇怪的动态的二维数点(相当于有一个扫描面扫过去,导致一系列的加点和询问) 然后cdq分治,再变回静态,考虑前半段对后半段的影响 ...

  7. Ajax/Highcharts—动态图表

    前面写过“Highcharts的用法总结”,当然了,在实际应用中,图表数据都是要从后台获取的,根据之前的使用,贴一些例子来分享学习. 首先,如果没有获取后台数据,又希望呈现一个动态图表的话,可以很轻易 ...

  8. 基于layui,Jquery 表格动态编辑 设置 编辑值为 int 或者 double 类型及默认值

    首先先推荐大家在看这篇笔记时,阅读过我写的这篇 Layui表格编辑[不依赖Layui的动态table加载] 阅读过上面那篇笔记之后呢,才能更好的理解我现在所要说的这个东西 接下来废话不多说,上代码. ...

  9. 6.6 省选模拟赛 线段 二维数点问题 树套树 CDQ分治

    LINK:线段 还是太菜了 没看出这道题真正的模型 我真是一个典型的没脑子选手. 考虑如何查询答案. 每次在一个线段x的状态被更改后 可以发现有影响的是 和x相连那段极长连续1子段. 设这个子段左端点 ...

随机推荐

  1. 8u ftp 可以连接但是无法获取目录的解决办法:无法打开传输通道。原因:由于...

    来自: http://www.3566t.com/news/dlsn/1557906.html 状态:  正在取得目录列表... 命令:  CWD xinghun 响应:  250 OK. Curre ...

  2. centos 时区设置初认识

    由于一些需要,我租用了一个海外服务器,并开始了我的centos之旅. 由于之前一直用虚拟机,而且在国内,所以不需要考虑时区的问题,但是现在,这个服务器是在海外的,所以就必须考虑时区的问题了.更何况我的 ...

  3. 通过hint干掉笛卡尔积

    Z_ZZZZZZZZ_BENE 大约有400万数据 修改前   SELECT xxxx FROM ( SELECT DISTINCT FIELD1_CONTENT FROM xxxxxxxx_LOG@ ...

  4. 使用PHP如何去除字符串结尾的字符

    前言 在工作中遇到一个需求:一串字符串,如"迅雷官方下载"."快播5.0下载",需要去掉他们结尾的"官方下载"和"下载" ...

  5. Linux系统升级

    查看centos版本的命令:uname -r 升级版本:yum -y upgrade 重启:reboot

  6. ES6 Sybol属性

    Symbol: 概念:ES6中的添加了一种原始数据类型symbol(已有的原始数据类型:String, Number, boolean, null, undefined, 对象) 特点: 1.Symb ...

  7. Servlet(Server Applet) 详解

    Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容. Servlet的工作模式 客户端发送请求至服务器 服务器启动并调用Servlet,Servlet根据客户端请求生 ...

  8. 记一次为解决Python读取PDF文件的Shell操作

    目录 一.背景 二.问题 三.解决 四.一顿分析及 Shell 操作 五.后续 一.背景 本想将 PDF 文件转换为 Word 文档,然后网上搜索了一下发现有挺多转换的软件.有的是免费的.收费,咱也不 ...

  9. Python获取房价信息和导出EXCEL

    房价与生活息息相关,那么各地区房价情况和差别咋样呢?  可以打开网站或手机APP去查询一下,不过查看到的数据有限,很不过瘾~ 作为一个合格的程序员,要懂得用代码解决问题! 第一步:打开一个房产交易平台 ...

  10. NX-二次开发删除对象UF_OBJ_delete_object

    NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_obj.h> UF_initialize ...