GCD (RMQ + 二分)
RMQ存的是区间GCD,然后遍历 i: 1->n, 然后不断地对[i, R]区间进行二分求以i为起点的相同gcd的区间范围,慢慢缩减区间。
#include<bits/stdc++.h>
#define LL long long
using namespace std; const int maxn = 1e5 + ;
int in[maxn], dp[maxn][], mm[maxn];
map<int, LL>cnt; void init(int n){
mm[] = -;
for(int i = ; i <= n; i ++){
mm[i] = (i&(i - ))?mm[i - ]:mm[i - ] + ;
dp[i][] = in[i];
}
for(int j = ; j <= mm[n]; j ++)
for(int i = ; i + (<<j) - <= n; i ++)
dp[i][j] = __gcd(dp[i][j - ], dp[i + (<<(j-))][j - ]);
} int RMQ(int l, int r){
int k = mm[r - l + ];
return __gcd(dp[l][k], dp[r - (<<k) + ][k]);
} int main(){
int T,n,m;scanf("%d",&T);
for(int ncase = ; ncase <= T; ncase ++){
printf("Case #%d:\n",ncase);
scanf("%d",&n);
for(int i = ; i <= n; i ++)scanf("%d",&in[i]);
init(n);cnt.clear();
int L, R, l, r, val, m;
for(int i = ; i <= n; i ++){
cnt[in[i]] ++;
L = i;R = n;
while(L < R){
val = RMQ(L,R) + ;
l = L;r = R;
while(l < r){
m = (l + r)/;
if(RMQ(L, m) >= val)
l = m + ;
else
r = m;
}
cnt[val - ] += R - m;
R = m;
}
}
scanf("%d",&m);
for(int i = ; i < m; i ++){
scanf("%d%d",&l,&r);
int val = RMQ(l,r);
printf("%d %lld\n",val, cnt[val]);
}
}
return ;
}
GCD (RMQ + 二分)的更多相关文章
- HDU 5726 GCD (RMQ + 二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5726 给你n个数,q个询问,每个询问问你有多少对l r的gcd(a[l] , ... , a[r]) ...
- 2016 Multi-University Training Contest 1 GCD RMQ+二分(预处理)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5726 题意:有N(N <= 100,000),之后有Q(Q <= 100,000)个区间查询[ ...
- *HDU3486 RMQ+二分
Interviewe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- hdu 5289 Assignment(2015多校第一场第2题)RMQ+二分(或者multiset模拟过程)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:给你n个数和k,求有多少的区间使得区间内部任意两个数的差值小于k,输出符合要求的区间个数 ...
- hdu 3486 Interviewe (RMQ+二分)
Interviewe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分
原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...
- HDU 5089 Assignment(rmq+二分 或 单调队列)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- 玲珑杯 Round 19 B Buildings (RMQ + 二分)
DESCRIPTION There are nn buildings lined up, and the height of the ii-th house is hihi. An inteval [ ...
- HDU 5726 GCD(RMQ+二分)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5726 题意:给出一串数字,现在有多次询问,每次询问输出(l,r)范围内所有数的gcd值,并且输出有多 ...
随机推荐
- MATLAB中产生随机数的那些函数
1.产生从imin~imax的m*n矩阵 randi([imin,imax],m,n); 2.产生1~n的无重复随机整数 randperm(n);
- python实现图片隐藏信息技术
隐秘通信的3种典型方式: ①将秘密信息隐于网络通信协议中. ②将秘密信息隐于数字签名等密码协议中 . ③将秘密信息隐于数字图像中. 第三种是利用图像或音频数据对人类感官系统的冗余. 隐藏域数字图像中的 ...
- dxRibbonRadialMenu控件使用
设计视图 双击dxRibbonRadialMenu1增加项目 增改显示文字 增加图标列表 代码很简单,从当前鼠标位置打开,屏蔽系统右键 procedure TForm1.cxMemo1ContextP ...
- Redis入门到高可用(十)—— Spring与Redis的整合
1.pom文件 <!--redis--> <dependency> <groupId>org.springframework.data</groupId> ...
- oracle添加字段,备注
1.添加字段: alter table 表名 add (字段 字段类型) [ default '输入默认值'] [null/not null] ; 2.添加备注: comment on ...
- 尾递归与Continuation(转载)
递归与尾递归 关于递归操作,相信大家都已经不陌生.简单地说,一个函数直接或间接地调用自身,是为直接或间接递归.例如,我们可以使用递归来计算一个单向链表的长度: public class Node { ...
- github的使用,利用git shell命令行创建仓库并上传
一.登录到github,新建一个版本仓库 二.在“Repository name”一栏里填写版本仓库的名称,如”test”,Description栏是描述,可填可不填. 默认访问权限为公共,点击”Cr ...
- Linux下solr集群搭建
第一步:创建四个tomcat实例.每个tomcat运行在不同的端口.8180.8280.8380.8480 第二步:部署solr的war包.把单机版的solr工程复制到集群中的tomcat中. 第三步 ...
- windows下使用pyinstaller把python文件打包成exe可执行文件
使用pyinstaller打包有个好处就是所有依赖都打包进去了,可以随意把文件移动到别的电脑上使用 安装 pip install pyinstaller 新建一个demo.py文件 #!/usr/bi ...
- squid 快速配置
安装 yum install squid -y yum install httpd-tools -y 基本认证配置文件 #网络 http_port dns_nameservers 100.100.2. ...