大白书上的例题,具体讲解见大白书,最好用用一个Log数组直接求k,这样就是纯O(1)了

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. using namespace std;
  7. #define N 100003
  8.  
  9. int a[N],num[N],le[N],ri[N],cnt[N];
  10. int d[N][],n,type;
  11.  
  12. void RMQ_init()
  13. {
  14. int i,j;
  15. for(i=;i<=type;i++)
  16. d[i][] = cnt[i];
  17. for(j=;(<<j)<=type;j++)
  18. {
  19. for(i=;i+(<<j)-<=type;i++)
  20. d[i][j] = max(d[i][j-],d[i+(<<(j-))][j-]);
  21. }
  22. }
  23.  
  24. int LOG[];
  25. void getLog(int n)
  26. {
  27. for(int i=;i<=n;i++)
  28. LOG[i] = (int)(log((double)i)/log(2.0));
  29. }
  30.  
  31. int RMQ(int l,int r)
  32. {
  33. int k = LOG[R-L+];
  34. return max(d[l][k],d[r-(<<k)+][k]);
  35. }
  36.  
  37. int main()
  38. {
  39. int q,i,j,pos;
  40. int l,r;
  41. while(scanf("%d",&n)!=EOF && n)
  42. {
  43. scanf("%d",&q);
  44. for(i=;i<=n;i++)
  45. scanf("%d",&a[i]);
  46. a[] = -;
  47. type = ;
  48. for(pos=;pos<=n;pos++)
  49. {
  50. if(a[pos] != a[pos-])
  51. {
  52. if(pos != )
  53. cnt[type] = pos-le[pos-];
  54. num[pos] = ++type;
  55. for(j=le[pos-];j<=pos-;j++)
  56. ri[j] = pos-;
  57. le[pos] = pos;
  58. if(pos == n)
  59. cnt[type] = ,ri[pos] = pos;
  60. }
  61. else
  62. {
  63. le[pos] = le[pos-];
  64. num[pos] = num[pos-];
  65. if(pos == n)
  66. {
  67. cnt[type] = pos - le[pos] + ;
  68. for(j=le[pos];j<=n;j++)
  69. ri[j] = n;
  70. }
  71. }
  72. }
  73. RMQ_init();
  74. while(q--)
  75. {
  76. scanf("%d%d",&l,&r);
  77. if(num[l] == num[r])
  78. {
  79. printf("%d\n",r-l+);
  80. continue;
  81. }
  82. int lmax = ri[l]-l+;
  83. int rmax = r-le[r]+;
  84. int mmax;
  85. if(num[l]+ > num[r]-)
  86. mmax = ;
  87. else
  88. mmax = RMQ(num[l]+,num[r]-);
  89. printf("%d\n",max(mmax,max(lmax,rmax)));
  90. }
  91. }
  92. return ;
  93. }

UVA 11235 Frequent Values ---RMQ的更多相关文章

  1. RMQ算法 以及UVA 11235 Frequent Values(RMQ)

    RMQ算法 简单来说,RMQ算法是给定一组数据,求取区间[l,r]内的最大或最小值. 例如一组任意数据 5 6 8 1 3 11 45 78 59 66 4,求取区间(1,8)  内的最大值.数据量小 ...

  2. UVa 11235 Frequent values (RMQ && 区间出现最多次的数的次数)

    题意 : 给出一个长度为 n 的不降序序列,并且给出 q 个形如(L, R)的问询,问你这个区间出现的最多次的数的次数. 分析 : 很自然的想到将区间“缩小”,例如1 1 2 3 3 3就可以变成2 ...

  3. UVA 11235 Frequent values(RMQ)

    Frequent values TimeLimit:3000Ms , ... , an in non-decreasing order. In addition to that, you are gi ...

  4. UVA 11235 Frequent values 线段树/RMQ

    vjudge 上题目链接:UVA 11235 *******************************************************大白书上解释**************** ...

  5. UVA - 11235 Frequent values

    2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...

  6. [POJ] 3368 / [UVA] 11235 - Frequent values [ST算法]

    2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...

  7. POJ 3368 & UVA 11235 - Frequent values

    题目链接:http://poj.org/problem?id=3368 RMQ应用题. 解题思路参考:http://blog.csdn.net/libin56842/article/details/4 ...

  8. 数据结构(RMQ):UVAoj 11235 Frequent values

    Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. I ...

  9. poj 3368 Frequent values(RMQ)

    /************************************************************ 题目: Frequent values(poj 3368) 链接: http ...

随机推荐

  1. C语言范例学习03-上

    第三章 数据结构 章首:不好意思,这两天要帮家里做一些活儿.而且内容量与操作量也确实大幅提升了.所以写得很慢. 不过,从今天开始.我写的东西,许多都是之前没怎么学的了.所以速度会慢下来,同时写得也会详 ...

  2. ASP.NET WebAPI 11 参数验证

    在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性. ModelState 在ApiController中一个ModelState属性用来获取参 ...

  3. springmvc+mybatis+spring 整合

    获取[下载地址]   [免费支持更新]三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] ...

  4. winform(进程和线程)

    一.进程:需要有用Process类用法一:Process.Start("calc");(不好用)该方法弊端:有许多程序不知道它的运行名字到底是什么,如果写错了,就会出现程序崩溃错误 ...

  5. 请用fontAwesome代替网页icon小图标

    1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...

  6. IOS6学习笔记(四)

    1.GCD设置一个timer计时器 - (void)awakeFromNib { __weak id weakSelf = self; double delayInSeconds = 0.25; _t ...

  7. Atitit.HTTP 代理原理及实现 正向代理与反向代理attilax总结

    Atitit.HTTP 代理原理及实现 正向代理与反向代理attilax总结 1. 普通代理1 1.1.1. 普通代理2 2. 隧道代理3 3. 反向代理 4 4. 正向代理也可以使用apache实现 ...

  8. maven eclipse 插件下载地址

    要用的时候,搜索了半天,自己记录下 单独下载地址 http://maven.apache.org/download.cgi eclipse 更新地址 http://download.eclipse.o ...

  9. Android——检查网络是否已经链接

    新建一个项目testNet 添加一个button layout.xml: <RelativeLayout xmlns:android="http://schemas.android.c ...

  10. 我对XCode Objective-c Cocoa的简单理解

    我对XCode Objective-c Cocoa的简单理解 Xcode Xcode说的通俗一点就是开发OS X 和 iOS 应用程序的. 如果我们想要认真点说 ,Xcode 是运行在操作系统Mac ...