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 一 ...
随机推荐
- MySql错误1045 Access denied for user 'root'@'localhost' (using password:YES)
1.先停止mysql服务 2.进入mysql的安装路径,找到并打开my.ini文件,找到[mysqld],在该行下面添加 skip_grant_tables,也就是通知mysql,在登陆的时候跳过密码 ...
- Linux apt & yum 及 常用命令
yum yum 语法 yum [options] [command] [package ...] options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes" ...
- Pagehelper介绍
本文引自:https://my.oschina.net/zudajun/blog/745232 摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybat ...
- python简介,数据类型,input,if语句
1. python的起源 python的创始人为吉多·范罗苏姆(龟叔Guido van Rossum),1989年的圣诞节期间,龟叔为了在阿姆斯特丹打发时间 决心开发一个新的脚本程序解释器,作为A ...
- 【yii2】 yii框架如果控制器和方法都是多个单词组成应该怎样写请求链接
最近的一个项目碰到这种问题,摸索出了解决办法,故此记录下 example 如果控制器为 ShopCollect 方法为 UserList solution 请求的链接应该为 doman.com/sho ...
- POJ 2441 状压DP
Arrange the Bulls Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 5289 Accepted: 2033 ...
- 笔记-python-built-in functions-eval,exec,compile
笔记-python-built-in functions-eval,exec,compile 1. python代码执行函数 有时需要动态改变代码,也就是说代码需要是字符串格式,然后在按需要 ...
- PHP.TP框架下商品项目的优化2-图片优化
图片存储.上传.显示优化 1.图片路径写进配置文件,当路径有变动时[因业务扩大,服务器存储图片空间不足等],只需修改配置文件,而不用修改代码 2.封装显示.上传.删除函数,实现代码重用 [可类比其他类 ...
- 挂个AC自动机
struct ACM{ ],f[N],cnt[N]; int sz,rt; int ins(char *s){ int n=strlen(s),u=rt; ;i<n;i++){ int c=s[ ...
- 深入理解Angular2变化监测和ngZone
转载自GitHub JTangming : https://github.com/JTangming/tm/issues/4 Angular应用程序通过组件实例和模板之间进行数据交互,也就是将组件的数 ...