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 + 二分)的更多相关文章

  1. HDU 5726 GCD (RMQ + 二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5726 给你n个数,q个询问,每个询问问你有多少对l r的gcd(a[l] , ... , a[r]) ...

  2. 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)个区间查询[ ...

  3. *HDU3486 RMQ+二分

    Interviewe Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  4. hdu 5289 Assignment(2015多校第一场第2题)RMQ+二分(或者multiset模拟过程)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:给你n个数和k,求有多少的区间使得区间内部任意两个数的差值小于k,输出符合要求的区间个数 ...

  5. hdu 3486 Interviewe (RMQ+二分)

    Interviewe Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  6. 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...

  7. HDU 5089 Assignment(rmq+二分 或 单调队列)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  8. 玲珑杯 Round 19 B Buildings (RMQ + 二分)

    DESCRIPTION There are nn buildings lined up, and the height of the ii-th house is hihi. An inteval [ ...

  9. HDU 5726 GCD(RMQ+二分)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5726 题意:给出一串数字,现在有多次询问,每次询问输出(l,r)范围内所有数的gcd值,并且输出有多 ...

随机推荐

  1. P1896 [SCOI2005]互不侵犯 状压dp

    正解:状压dp 解题报告: 看到是四川省选的时候我心里慌得一批TT然后看到难度之后放下心来觉得大概没有那么难 事实证明我还是too young too simple了QAQ难到爆炸TT我本来还想刚一道 ...

  2. JavaScript学习笔记--语法

    代码风格: 每句结尾不用加分号: 单行注释用//,多行注释用/*...需要注释掉的代码....*/ 严格区分大小写 优雅的代码需要注意锁进 基础知识: Number:JavaScript不区分整数和浮 ...

  3. SHOW STATUS 查看各种类型SQL执行的频率

    通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extendedstatus 命令获得.SHOW STATUS 可以根据需要显示 session 级别的统计结果 ...

  4. Failed to load bundle(http://loaclhost:8081/index.bundle?platfrom=ios.....

    另外RN的创建的项目可能上架审核不太容易通过,祝你好运 1.可能当前同时运行多个项目,关闭一个项目就可以,或者重启 2.init 命令默认会创建最新的版本,而目前最新的 0.45 及以上版本需要下载 ...

  5. 004-RestTemplate 使用常见问题

    一.使用 同前三节:ClientGetGoodsByGoodsIdResponse response = restTemplate.postForObject(svcUrl, request, Res ...

  6. windows media player 官方修复工具下载及修复方法

    http://download.microsoft.com/download/E/2/3/E237A32D-E0A9-4863-B864-9E820C1C6F9A/MicrosoftFixit.Win ...

  7. WD 蓝盘、绿盘、黑盘、红盘的区别

    绿盘,蓝盘.黑盘和红盘是西部数据根据旗下所产硬盘的特点所做的分类,通俗点讲:所谓的黑盘.蓝盘.绿盘.红盘就是指的西部数据硬盘上贴的那张纸,是黑色.蓝色.绿色.或红色. 黑盘:高性能,大缓存,速度快.代 ...

  8. javascript篇-typeof,instanceof,constructor,toString判断数据类型的用法和区别

    javascript基本数据类型有:string,number,Boolean,undefined,null 引用类型(复杂类型):object, ES6中新增了一种数据类型:Symbol 以上数据类 ...

  9. vue-router路由管理器

    安装vue-router npm install vue-router 在main.js中引入 import VueRouter from 'vue-router' Vue.use(VueRouter ...

  10. pycharm的安装和使用

    python开发IDE:  pycharm.eclipse 1.要专业版 2.不要汉化版 一.运算符 +  -  * ./  **   %  // 判断某个东西是否在东西里面包含 in   not   ...