博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF359D:Pair of Numbers(数论)
阅读量:7107 次
发布时间:2019-06-28

本文共 2190 字,大约阅读时间需要 7 分钟。

reference:WannaflyUnion Wechat
D. Pair of Numbers
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Simon has an array a1, a2, ..., an, consisting of n positive integers. Today Simon asked you to find a pair of integers l, r (1 ≤ l ≤ r ≤ n), such that the following conditions hold:

  1. there is integer j (l ≤ j ≤ r), such that all integers al, al + 1, ..., ar are divisible by aj;
  2. value r - l takes the maximum value among all pairs for which condition 1 is true;

Help Simon, find the required pair of numbers (l, r). If there are multiple required pairs find all of them.

Input

The first line contains integer n (1 ≤ n ≤ 3·105).

The second line contains n space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 106).

Output

Print two integers in the first line — the number of required pairs and the maximum value of r - l. On the following line print all l values from optimal pairs in increasing order.

Examples
input
54 6 9 3 6
output
1 32
input
51 3 5 7 9
output
1 41
input
52 3 5 7 11
output
5 01 2 3 4 5
Note

In the first sample the pair of numbers is right, as numbers 6, 9, 3 are divisible by 3.

In the second sample all numbers are divisible by number 1.

In the third sample all numbers are prime, so conditions 1 and 2 are true only for pairs of numbers (1, 1)(2, 2)(3, 3)(4, 4)(5, 5).

题意:给定一个数组,求最长的区间,使得该区间内存在一个元素,它能整除该区间内每一个元素。

思路:从数组第一个元素开始向两边延伸,如右边延伸到r,下一轮从r+1开始考虑即可。

# include 
# include
# include
# include
# include
# include
# define INF 0x3f3f3f3fusing namespace std;const int MAXN = 3e5;int a[MAXN+3]={0};int main(){ vector
v; int n, ans; while(~scanf("%d",&n)) { bool flag = false; ans = -INF; for(int i=1; i<=n; ++i) scanf("%d",&a[i]); for(int i=1; i<=n; ++i) { if(a[i]==1) { flag = true; printf("1 %d\n1\n",n-1); break; } int j, k; for(j=i; j-1>0&&a[j-1]%a[i]==0; --j); for(k=i; k+1<=n&&a[k+1]%a[i]==0; ++k); if(k-j > ans) { ans = k-j; v.clear(); } if(k-j == ans) v.push_back(j); i = k; } if(!flag) { printf("%d %d\n",v.size(), ans); for(int i=0; i

转载于:https://www.cnblogs.com/junior19/p/6729963.html

你可能感兴趣的文章
扩展jwt解决oauth2 性能瓶颈
查看>>
如何选择合适的基于ARM的MCU
查看>>
Android Gradle进阶配置指南
查看>>
Java 8 - lambda
查看>>
Installing a Dependency Library for Function Compute
查看>>
Java B2B2C多用户商城 springcloud架构 - 企业云架构common-service代码结构分析(六)...
查看>>
SpringBoot b2b2c 多用户商城系统(十五)Springboot整合RabbitMQ
查看>>
【重磅】Spring Boot 2.1.0 权威发布
查看>>
深创投旗下首只天使基金成立 总规模5亿元
查看>>
golang快速扫描
查看>>
「镁客早报」夏普分拆半导体业务;教育部要求高校组织开展基因编辑相关研究项目自查工作...
查看>>
python学习手册15 文档
查看>>
js笔记
查看>>
PostgreSQL 大版本升级方法之一 - 不落地并行导出导入
查看>>
2019大数据学习路线指南(最全知识点总结)
查看>>
Android组件化开发实践和案例分享
查看>>
Unity游戏开发之C#快速入门
查看>>
400+ 节点的 Elasticsearch 集群运维
查看>>
Linux基础命令---unzip
查看>>
PostgreSQL 列存索引
查看>>