ZROI2018普转提day2t4
2024-10-19 01:28:07
分析
考场上暴力水过好评...
然后我的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 ;
}
最新文章
- 《JavaScript设计模式与开发实践》整理
- Java 程序的打包、签名和验证
- repeater三级嵌套绑定
- 【Linux驱动】内核等待队列
- ruby -- 进阶学习(十三)解说ckeditor在production环境下如何完整显示
- grunt构建前端自动化的开发环境
- MongoDB分片简单实例
- AlarmManager使用注意事项
- Python 中的 is 和 id
- Html.Action和Html.RederAction来创建子视图
- CSS——inline-block属性
- 怎么样MyEclipse配置Tomcat?
- 递归与尾递归(C语言)
- 《Head First Python》学习笔记03 异常处理
- javaScript设计模式之常用工厂模式
- ELK学习笔记(五)简单搜索和DSL查询
- 【Git】(2)---checkout、branch、log、diff、.gitignore
- JS属性修改
- 【Linux】开机自动启动脚本
- Java 与 .NET 的平台发展之争
热门文章
- css Flex布局(一)
- Linux-压缩与解压缩命令
- UVA - 11916 Emoogle Grid (组合计数+离散对数)
- RabbitMQ用户角色及权限控制(不错)
- 微信小程序 写音乐播放器 slider组件 将value设置为0 真机测试滑块不能回到起点
- [调试日志]用php函数var_export把多维数组file_put_contents写入并打印到日志,以方便调试之多维数组,用php5中的var_export函数示例,顺带介绍http_build_query(转)
- 两种设置WebLogic启动内存的方法
- IDEA中遇到的gradle问题:unindexed remote maven repositories found
- 机器学习:scikit-learn 文档、深入学习机器学习的思路
- linux 命令 chown, cp $