Codeforces 359D Pair of Numbers | 二分+ST表+gcd
题面:
给一个序列,求最长的合法区间,合法被定义为这个序列的gcd=区间最小值
输出最长合法区间个数,r-l长度
接下来输出每个合法区间的左端点
题解:
由于区间gcd满足单调性,所以我们可以二分区间长度,用st表维护区间最小值和gcd即可
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define N 300100
using namespace std;
int gcd(int x,int y)
{
return y==?x:gcd(y,x%y);
}
int rgcd[N][],rmin[N][],n,l,r,mid,ans,ok[N];
int check(int len)
{
if (len==) return ;
for (int i=;i+len<=n;i++)
{
int tmp=log2(len+);
if (gcd(rgcd[i][tmp],rgcd[i+len-(<<tmp)+][tmp]) == min(rmin[i][tmp],rmin[i+len-(<<tmp)+][tmp]))
return ;
}
return ;
}
int main()
{
scanf("%d",&n);
for (int i=,x;i<=n;i++)
scanf("%d",&x),rgcd[i][]=rmin[i][]=x;
for (int j=;j<=;j++)
for (int i=;i+(<<j)-<=n;i++)
rgcd[i][j]=gcd(rgcd[i][j-],rgcd[i+(<<j-)][j-]),rmin[i][j]=min(rmin[i][j-],rmin[i+(<<j-)][j-]);
r=*n;
while (l<r)
{
mid=l+r+>>;
if (check(mid))
l=mid;
else r=mid-;
}
for (int i=;i+l<=n;i++)
{
int tmp=log2(l+);
if (gcd(rgcd[i][tmp],rgcd[i+l-(<<tmp)+][tmp]) == min(rmin[i][tmp],rmin[i+l-(<<tmp)+][tmp]))
ok[i]=,ans++;
}
printf("%d %d\n",ans,l);
for (int i=;i<=n;i++)
if (ok[i]) printf("%d ",i);
return ;
}
Codeforces 359D Pair of Numbers | 二分+ST表+gcd的更多相关文章
- [codeforces] 359D Pair of Numbers
原题 RMQ st表棵题 要想让一个区间里的所有数都可以整除其中一个数,那么他一定是这个区间内的最小值,并且同时是这个区间的gcd.然后这个问题就转化成了RMQ问题. 维护两个st表,分别是最小值和g ...
- CodeForces 359D Pair of Numbers (暴力)
题意:给定一个正整数数组,求最长的区间,使得该区间内存在一个元素,它能整除该区间的每个元素. 析:暴力每一个可能的区间,从数组的第一个元素开始考虑,向两边延伸,设延伸到的最左边的点为l, 最右边的点为 ...
- BZOJ4556:[TJOI\HEOI2016]字符串(后缀数组,主席树,二分,ST表)
Description 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为n的字符串s,和m个问题.佳媛姐姐必须正确回答这m个问题,才能打开箱 ...
- BZOJ3166 [Heoi2013]Alo 【可持久化trie树 + 二分 + ST表】
题目 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题. 现在你拥有n颗宝石,每颗宝石 ...
- [BZOJ4310] 跳蚤 - 后缀数组,二分,ST表
[BZOJ4310] 跳蚤 Description 首先,他会把串分成不超过 \(k\) 个子串,然后对于每个子串 \(S\) ,他会从 \(S\) 的所有子串中选择字典序最大的那一个,并在选出来的 ...
- HDU5726 GCD(二分 + ST表)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5726 Description Give you a sequence of N(N≤100, ...
- ZJOI2018 胖 二分 ST表
原文链接https://www.cnblogs.com/zhouzhendong/p/ZJOI2018Day2T2.html 题目传送门 - BZOJ5308 题目传送门 - LOJ2529 题目传送 ...
- BZOJ 5308 [ZJOI2018] Day2T2 胖 | 二分 ST表
题目链接 LOJ 2529 BZOJ 5308 题解 这么简单的题 为什么考场上我完全想不清楚 = = 对于k个关键点中的每一个关键点\(a\),二分它能一度成为哪些点的最短路起点(显然这些点在一段包 ...
- BZOJ3473:字符串(后缀数组,主席树,二分,ST表)
Description 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串? Input 第一行两个整数n,k. 接下来n行每行一个字符串. Output 一 ...
随机推荐
- Vue项目架构设计与工程化实践
摘自Berwin<Vue项目架构设计与工程化实践>github.com/berwin/Blog/issues/14 1.Vue依赖套件 vuex:项目复杂后,用vuex来管理状态 elem ...
- Mybatis-传参
单参数传递 在mapper文件使用动态SQL时,传入参数的名称任意.不影响参数传入的结果 多参数传递 默认传递方式 自动将传入的参数进行排序,并用arg1…argeN或者param1…paramN赋值 ...
- Intellij IDEA 查找接口实现类的快捷键
查找接口的实现类: IDEA 风格 ctrl + alt +B 查看类或接口的继承关系: ctrl + h 1.IDEA_查找接口的实现 的快捷键 http://blog.csdn.net/u0100 ...
- Linux下常用压缩 解压命令与压缩比率对比
常用的格式有:tar, tar.gz(tgz), tar.bz2, 不同方式,压缩和解压方式所耗CPU时间和压缩比率也差异也比较大. 1. tar只是打包动作,相当于归档处理,不做压缩:解压也一样,只 ...
- 【jQuery】阶段(插入、复制、替换、删除)
<p>你好!</p> 你最喜欢的水果是? <ul> <li title="苹果">苹果</li> <li titl ...
- 字典--数据结构与算法JavaScript描述(7)
字典 字典是一种以键-值对形式存储数据的数据结构. Dictionary 类 Dictionary 类的基础是Array 类,而不是Object 类. function Dictionary( ){ ...
- Sqoop 工具使用
Sqoop 是什么及安装 Hadoop sqoop Apache sqoop (SQL to Hadoop) Sqoop is a tool designed to transfer data bet ...
- Android 人脸识别
Android人脸识别技术,可以参考下面的网站. http://www.faceplusplus.com.cn/ 本项目使用的就是该网站的api. 项目具体使用的技术代码 /** * 用来压缩图片的方 ...
- linux中jdk的安装与mysql 的安装
1.linux安装jdk #先找到 安装包#cd /usr/java tar -zxvf jdk-8u31-linux-x64.tar.gz 2.安装选择要安装java的位置,如/usr/目录下,新建 ...
- CSS的z-index & 绝对定位与相对定位
1.在有些情况下,需要仔细地控制元素在网页中堆叠顺序.z-index样式属性让你能够设置元素的堆叠顺序. 堆叠元素时,z-index值较大的元素在z-index值较小的下面. 2.z-index值仅在 ...