传送门

分析

考场上暴力水过好评...

然后我的st表查询似乎是log的,然后log三方跑的比log方快,qwq。

我们发现如果一个区间的最小值就是这个区间的gcd,则这个区间合法。所以我们二分区间长度然后枚举起点检验是否合法即可。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
const int LOG = ;
int n,a[],st1[][LOG+],st2[][LOG+],ans[],cnt;
inline int gcd(int x,int y){return y?gcd(y,x%y):x;}
inline bool ck(int sum){
int i,j,k;
if(sum==)return ;
for(i=;i+sum<=n;i++){
for(j=LOG;j>=;j--)
if((<<j)<=sum){
if(min(st1[i][j],st1[(i+sum)-(<<j)+][j])==gcd(st2[i][j],st2[(i+sum)-(<<j)+][j]))
return ;
break;
}
}
return ;
}
inline void go(int sum){
int i,j,k;
for(i=;i+sum<=n;i++){
for(j=LOG;j>=;j--)
if((<<j)<=sum){
if(min(st1[i][j],st1[(i+sum)-(<<j)+][j])==gcd(st2[i][j],st2[(i+sum)-(<<j)+][j]))
ans[++cnt]=i;
break;
}
}
if(sum==)
for(i=;i<=n;i++)ans[++cnt]=i;
cout<<cnt<<' '<<sum<<endl;
for(i=;i<=cnt;i++)printf("%d ",ans[i]);
puts("");
return;
}
int main(){
int i,j,k;
scanf("%d",&n);
for(i=;i<=n;i++)scanf("%d",&a[i]),st1[i][]=st2[i][]=a[i];
for(i=;i<=LOG;i++)
for(j=;j<=n;j++)if(j+(<<i)-<=n){
st1[j][i]=min(st1[j][i-],st1[j+(<<(i-))][i-]);
st2[j][i]=gcd(st2[j][i-],st2[j+(<<(i-))][i-]);
}
int le=,ri=n;
while(ri-le>){
int mid=(le+ri)>>;
if(ck(mid))le=mid;
else ri=mid;
}
go(le);
return ;
}

ZROI2018普转提day2t4的更多相关文章

  1. ZROI2018普转提day6t1

    传送门 分析 记录区间最大值,线段树上二分找比这个点大的最靠前位置即可 代码 #include<iostream> #include<cstdio> #include<c ...

  2. ZROI2018普转提day6t3

    传送门 分析 居然卡哈希数,万恶的出题人...... 感觉我这个方法似乎比较呆,我的代码成功成为了全网最慢的代码qwq 应该是可以直接哈希的 但由于我哈希学的不好又想练练线段树维护哈希,于是就写了个线 ...

  3. ZROI2018普转提day7t1

    传送门 分析 一道有意思的小题... 我们发现如果$(1,1)$为白色,则将其变为白色需要偶数次操作,而如果为黑色则需要奇数次操作 我们知道要让A赢需要奇数次操作,所以我们只需要判断$(1,1)$的颜 ...

  4. ZROI2018普转提day7t2

    传送门 分析 首先我们不难想到我们一定可以将每一个点分开算,然后看这个点被几个矩形包含 于是对于位置为$(i,j)$的点它被包含的次数为$i * (n-i+1) * j * (m-j+1)$ 这个式子 ...

  5. ZROI2018普转提day1t4

    传送门 分析 就是飞飞侠这道题...... 我们可以将这张图建成好几层,每一层可以向下一层的上下左右无代价移动,而对于每个点如果付b[i][j]的代价就可以走到比它高a[i][j]的层上.我们用这种方 ...

  6. ZROI2018普转提day1t1

    传送门 分析 我们先二分一下最终的平均值mid,然后让序列中的每一个数都减去这个mid,之后用新序列的前缀和建一棵线段树,枚举起点i,然后求出此时在i+L-1~i+R-1范围内的前缀和的最大值,用这个 ...

  7. ZROI2018普转提day2t2

    传送门 分析 我们发现2R+C实际就相当于R行C列的子集的个数.因此我们可以将所有集合的子集个数转换为每个集合属于的集合的个数.所以我们可以求出: 这个式子的意义为对于选i行j列的情况的所有方案乘上i ...

  8. ZROI2018普转提day2t1

    传送门 分析 我们通过仔细研究不难发现对于一次交换(i,i+1)的操作之后,在i之前的点就不可能跑到i之后,i+1之后的的点也不可能跑到i+1之前,所以这个序列在一次交换之后就相当于被分成了两个部分. ...

  9. ZROI2018普转提day2t3

    传送门 分析 考试的时候sb了......我们发现可以按照先序遍历将一棵树变成一个序列,而不需要删的数的数量便是最长上升子序列的长度,但是还有一个问题就是如果在5和7之间有3个空的位置就无法填入合法的 ...

随机推荐

  1. 配合Jenkins自动化构建,bat脚本(一)

    C:\Windows\System32\inetsrv\appcmd.exe stop site ServiceIIS C:\Windows\System32\inetsrv\appcmd.exe s ...

  2. APP登录的机制

    1.APP每次发送请求时,都会发送header给服务器,服务器去校验传过来的信息是否正确:校验成功后登录成功,若传入的信息不符合该用户的信息则服务器判断,传给APP登录失败 每次的请求都会传入上图中的 ...

  3. cscope配置和使用

    , cscope安装 软件下载:http://sourceforge.net/project/showfiles.php?group_id=4664 软件安装: ./configure --with- ...

  4. Debian For ARM mysql-server install information

    /**************************************************************************** * Debian For ARM mysql ...

  5. POJ1733:Parity game

    浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:http://poj.org/problem?id=1733 带权并查集裸题.区间和 ...

  6. ECMAScript6入门-序言

    本系列笔记基于阮一峰大佬的开源书籍.如果大家想看可以去该地址 本系列笔记只记录本人自己学习的过程,如果有侵权收到通知会自行下架. 如果大家看到可以直接去地址处学习,如果觉得好还望支持正版. 在此感谢阮 ...

  7. C++动多态和静多态

    动多态的设计思想:对于相关的对象类型,确定它们之间的一个共同功能集,然后在基类中,把这些共同的功能声明为多个公共的虚函数接口.各个子类重写这些虚函数,以完成具体的功能.客户端的代码(操作函数)通过指向 ...

  8. 【转】js获取对象的所有属性和方法

    //有时候需要知道一个js对像的所有属性和方法来帮助调试,下面是再网上找到的一个比较给力的方法 function displayProp(obj){ var names=""; f ...

  9. 【转】linux平台Redis安装部署

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...

  10. VMware安装操作系统(Operating System not found一个错误原因)

    因为指定的IOS文件是多种操作系统的组合,如Win7(32位和64位完全版),那么安装的时候选择一个操作系统类型和ios文件的类型就匹配不上,所以出现这种错误.