RMQ存的是区间GCD,然后遍历 i: 1->n, 然后不断地对[i, R]区间进行二分求以i为起点的相同gcd的区间范围,慢慢缩减区间。

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. using namespace std;
  4.  
  5. const int maxn = 1e5 + ;
  6. int in[maxn], dp[maxn][], mm[maxn];
  7. map<int, LL>cnt;
  8.  
  9. void init(int n){
  10. mm[] = -;
  11. for(int i = ; i <= n; i ++){
  12. mm[i] = (i&(i - ))?mm[i - ]:mm[i - ] + ;
  13. dp[i][] = in[i];
  14. }
  15. for(int j = ; j <= mm[n]; j ++)
  16. for(int i = ; i + (<<j) - <= n; i ++)
  17. dp[i][j] = __gcd(dp[i][j - ], dp[i + (<<(j-))][j - ]);
  18. }
  19.  
  20. int RMQ(int l, int r){
  21. int k = mm[r - l + ];
  22. return __gcd(dp[l][k], dp[r - (<<k) + ][k]);
  23. }
  24.  
  25. int main(){
  26. int T,n,m;scanf("%d",&T);
  27. for(int ncase = ; ncase <= T; ncase ++){
  28. printf("Case #%d:\n",ncase);
  29. scanf("%d",&n);
  30. for(int i = ; i <= n; i ++)scanf("%d",&in[i]);
  31. init(n);cnt.clear();
  32. int L, R, l, r, val, m;
  33. for(int i = ; i <= n; i ++){
  34. cnt[in[i]] ++;
  35. L = i;R = n;
  36. while(L < R){
  37. val = RMQ(L,R) + ;
  38. l = L;r = R;
  39. while(l < r){
  40. m = (l + r)/;
  41. if(RMQ(L, m) >= val)
  42. l = m + ;
  43. else
  44. r = m;
  45. }
  46. cnt[val - ] += R - m;
  47. R = m;
  48. }
  49. }
  50. scanf("%d",&m);
  51. for(int i = ; i < m; i ++){
  52. scanf("%d%d",&l,&r);
  53. int val = RMQ(l,r);
  54. printf("%d %lld\n",val, cnt[val]);
  55. }
  56. }
  57. return ;
  58. }

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. inet_addr()和inet_ntoa()使用注意

    inet_addr():无法处理255.255.255.255,认为该ip为非法,返回-1 inet_ntoa():转换后地址存储在静态变量中,连续两次调用,第二次会覆盖第一次的值. 建议使用inet ...

  2. java 数组(二)

    public class ArrayDemo{ public static void main(String[] args){ int[] arr = {1,5,3,8,2,9,17,13}; get ...

  3. webpack中loader和plugin的概念理解

    对于 loader ,它就是一个转换器,将A文件进行编译形成B文件,这里操作的是文件,比如将 A.scss 或 A.less 转变成 B.css,单纯的文件转换过程: 对于 plugin,它就是一个扩 ...

  4. es中如何定位不合法搜索

    GET /test_index/test_type/_validate/query?explain{ "query": { "math": { "te ...

  5. passwd 修改密码

    [root@localhost ~]# passwd # 修改 root 用户的密码 [root@localhost ~]# passwd test # 修改指定用户的密码

  6. DedeCMS后台500错误一种原因是不支持PHP5.3、5.4及以上版本

    我们在迁移网站的时候,可能会出现DedeCMS后台500错误,有可能是因为dedecms不支持PHP5.3.5.4及以上版本,这时我们要改动一些设置才能修复成功.跟着ytkah来修改配置文件吧.首先打 ...

  7. 关于ios下字体描边的一个细节

    转载请注明,来自:http://blog.csdn.net/skyman_2001    CGContextSetTextDrawingMode(context, kCGTextStroke);    ...

  8. sap 程序之间的相互调用

    1:首先进入到local object 目录下. 右键>create >function group,创建一个函数组. 右键创建类其它的东西 2:在创建的function group(fu ...

  9. Google之路

    1,找一个靠谱的dns 2, 替换 C:\Windows\System32\drivers\etc\hosts文件 3,刷新dns 在cmd下运行 ipconfig /flushdns 成功后会提示: ...

  10. SSLServerSocket代码实现

    理解一个设计思想,结合代码是最好的途径.安全套接字服务端的实现代码如下: X509TrustManager MyX509TrustManager = new X509TrustManager() { ...