利用区间 gcd 个数不超过 log 种来做就可以了~

code:

#include <bits/stdc++.h>
#define N 300005
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n;
set<int>s;
struct solve
{
int A[N],pos[N],len[N],gc[N],b[N],top,tmp;
void get()
{
int i,j;
for(i=1;i<=n;++i)
{
for(j=1;j<=top;++j) gc[j]=__gcd(gc[j], A[i]);
gc[++top]=A[i], pos[top]=i, b[tmp=1]=1;
for(j=2;j<=top;++j) if(gc[j]!=gc[j-1]) b[++tmp]=j;
for(top=0,j=1;j<=tmp;++j) gc[++top]=gc[b[j]], pos[top]=pos[b[j]];
len[i]=i-pos[top]+1;
}
}
}ori,rev;
int main()
{
// setIO("input");
int i,j,re=0,cnt=0;
scanf("%d",&n);
for(i=1;i<=n;++i) scanf("%d",&ori.A[i]);
for(i=1;i<=n;++i) rev.A[i]=ori.A[n-i+1];
ori.get(), rev.get();
for(i=1;i<=n;++i) re=max(re, ori.len[i]+rev.len[n-i+1]-2);
for(i=1;i<=n;++i) if(ori.len[i]+rev.len[n-i+1]-2==re) s.insert(i-ori.len[i]+1);
printf("%d %d\n",s.size(), re);
for(set<int>::iterator it=s.begin();it!=s.end();it++) printf("%d ",*it);
return 0;
}

  

最新文章

  1. 连载《一个程序猿的生命周期》- 44.感谢,我从事了IT相关的工作
  2. leetcode 165
  3. Python中的几种数据类型
  4. mysql关于字符串字段数据类型
  5. poj 2187
  6. PageLayoutControl的基本操作
  7. 【.NET】电话号码打星号(隐藏部分)
  8. JS中几种常见的数组算法(前端面试必看)
  9. 如何将ubuntu文件夹中文名改为英文
  10. RxJS核心概念之Subjet在angular2+上的应用
  11. Python——进程队列
  12. iOS强制横屏或强制竖屏
  13. curl重写php file_get_contents
  14. 一名3年工作经验的java程序员应该具备的职业技能
  15. 如何查看 Ubuntu下已安装包版本号
  16. ES使用org.elasticsearch.client.transport.NoNodeAvailableException: No node available 错误解决方法
  17. Android 应用程序之间内容分享详解(一)
  18. 科学计算三维可视化---Mayavi可视化实例
  19. CentOS7 tomcat systemctl脚本
  20. 【318】C# 学习笔记

热门文章

  1. WUSTOJ 1333: Sequential game(Java)
  2. VUE框架概括+模块语法使用(上)
  3. oracle给用户授权存储过程
  4. javascript之防抖与节流
  5. springboot2.x配置druid sql监控
  6. GoLand中同一个目录下的package无法调用
  7. 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)
  8. OAuth 2.0 简介
  9. iOS Touch Id 开发
  10. iOS自动布局学习(UIView+AutoLayout)