【STSRM12】整除
【题意】给定长度为n的序列A,求最长的区间满足区间内存在数字能整除区间所有数字,同时求所有方案。n<=5*10^5,Ai<2^31。
【算法】数论???
【题解】首先一个区间的基准数一定是最小的数字。
以一个数字为基准数,左右扩展到的区间内的数字都不能再作为基准数(不会超过此时的区间,为同一个)。
从小到大选取基准数并左右扩展(标记),标记过的不再作为基准数。
复杂度O(n log n)。(排序的复杂度)
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=;
int a[maxn],p[maxn],n,ans,ansx,b[maxn];
bool vis[maxn];
bool cmp(int x,int y){return a[x]<a[y];}
void work(int x){
if(vis[x])return;
int l,r;
for(l=x;l>=&&a[l]%a[x]==;l--)vis[l]=;
for(r=x;r<=n&&a[r]%a[x]==;r++)vis[r]=;
// printf("l=%d r=%d\n",l,r);
if(r-l->ans){ans=r-l-;p[ansx=]=l+;}
else if(r-l-==ans){p[++ansx]=l+;}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){scanf("%d",&a[i]);b[i]=i;}
sort(b+,b+n+,cmp);
for(int i=;i<=n;i++)work(b[i]);
sort(p+,p+ansx+);
printf("%d %d\n",ansx,ans);
for(int i=;i<=ansx;i++)printf("%d ",p[i]);
return ;
}
【STSRM12】整除的更多相关文章
- [LeetCode] Largest Divisible Subset 最大可整除的子集合
Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of ...
- 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2<=n<=1000),a(2<=a<=1000) 输出: 一个整数. ...
- 判断整数是否能被n整除
(1)1与0的特性: 1是任何整数的约数,即对于任何整数a,总有1|a. 0是任何非零整数的倍数,a≠0,a为整数,则a|0. (2)若一个整数的末位是0.2.4.6或 ...
- 【P1825】表达式整除
又自己写出来了好开心OvO 原题: 24点这个游戏好多人都玩过,就是给你4个数,添加相应的运算符,是否可以得到结果是24.小x在玩了很多遍这个游戏之后,想把这个游戏给改变一下.给你n个整数,在n个整数 ...
- HDU 5373 (大水坑题---被11整除原来有规律)
题意:告诉一个数n,然后求出所有的位数和,插在n的尾部,重复求t次,判断最终的数是否能被11整除. 分析:直接模拟的过程,并且模拟的除的过程,却TLE,以为是方法错了,因为每次都得循环求一遍位数和: ...
- 整除的尾数[HDU2099]
整除的尾数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- OpenJudge计算概论-能被3,5,7整除的数
/*===================================== 能被3,5,7整除的数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个整数,判断它能否被3,5, ...
- 学习练习 java练习小题题目:判断一个整数能被几个9整除
题目:判断一个整数能被几个9整除 package com.hanqi.lianxi; import java.io.*; public class Test1 { //判断能否被9整除 static ...
- Java输出1~1000之间所有可以被3整除又可以被5整除的数
主要在于判断是否能被整除,思路是用取余运算符%,取余结果为0就表示能被整除. 代码如下: public class NumDemo { public static void main(String a ...
随机推荐
- CC3200模块的内存地址划分和bootloader(一)
1. CC3200的内存地址划分非常特殊,如果没测试的话,很容易懵逼.我们先看芯片手册里面的内存地址.芯片的RAM是256KB,下图的0x2000 0000-0x2003 FFFF,正好是256KB. ...
- 从一个线上服务器警告谈谈backlog
缘起 双十一如期而至,此时的我因为在处理客户的一个问题已经陷入了忙碌.突然,不断接到驻场实施发来的反馈,都是相同的反馈--"客户端操作缓慢". 我现在负责的服务器是一台接口服务器, ...
- 【jQuery】 选择器
[jQuery] 选择器 资料: w3school http://www.w3school.com.cn/jquery/jquery_ref_selectors.asp 1. 标签选择器 : $(& ...
- Qt 蓝牙部分翻译
这是我第一次尝试翻译技术文档,自己英语太烂,一直不敢尝试,感谢生活,让我勇敢迈出这第一步. 大部分都是直译,如有不妥,还请制导. Qt Bluetooth The Bluetooth API prov ...
- POJ 1015 Jury Compromise (动态规划)
dp[i][j]代表选了i个人,D(J)-P(J)的值为j的状态下,D(J)+P(J)的最大和. #include <cstdio> #include <cstring> #i ...
- 第16讲——C++中的代码重用
C++的一个主要目标是促进代码重用.除了我们之前学的公有继承,我们在这一讲将介绍另一种代码重用的方法——类模板.
- Mininet实验 基于Mininet测量路径的损耗率
实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为,此外,还可以利用控制器测量路径的损耗率.在本实验中,基于Mininet脚本,设置特定的交换机间的路径损耗速率,然后编 ...
- io学习2-磁盘阵列RAID
磁盘阵列 RAID(Redundant ArrayOf Inexpensive Disks) 如果你是一位数据库管理员或者经常接触服务器,那对RAID应该很熟悉了,作为最廉价的存储解决方案,RAID早 ...
- C#程序中SQL语句作为函数参数形式问题
今天遇到一个神奇现象,目前正在写一个Demo,人事管理系统,首先肯定是初始化主页面,在初始化时,需要声明一个登陆窗体,但是当我在登陆窗体中填入登入名称和密码时直接就登陆成功了,但是发现我的status ...
- Jboss6内存修改
1.启动脚本:/home/jboss/jboss-eap-6.2/bin/standalone.sh -Djboss.bind.address.management=192.168.0.62 -Djb ...