数据结构 RMQ算法   左右左右   写得有点晕了 。。。。。

  1. /*************************************************************************
  2. > Author: xlc2845 > Mail: xlc2845@gmail.com
  3. > Created Time: 2013年11月07日 星期四 11时05分22秒
  4. ************************************************************************/
  5.  
  6. #include <cstdio>
  7. //#include <iostream>
  8. #include <cstring>
  9. #include <algorithm>
  10. #include <queue>
  11. #define LL long long
  12. #define maxn 100010
  13. using namespace std;
  14.  
  15. int val[maxn], cou[maxn], n, q, num[maxn], left[maxn], right[maxn], d[maxn][100];
  16. void init()
  17. {
  18. memset(val, 0, sizeof(val));
  19. memset(cou, 0, sizeof(cou));
  20. memset(d, 0, sizeof(d));
  21. }
  22. void init_RMQ(int k)
  23. {
  24. for(int i = 0; i < k; i++)
  25. d[i][0] = cou[i];
  26. for(int j = 1; (1 << j) <= n; j++)
  27. for(int i = 0; i+(1 << j) - 1 < n; i++)
  28. d[i][j] = max(d[i][j-1], d[i+(1 << (j-1))][j-1]);
  29. }
  30. int RMQ(int L, int R)
  31. {
  32. if(L > R)
  33. return 0;
  34. int k = 0;
  35. while((1 << (k+1)) <= R-L+1) k++;
  36. return max(d[L][k], d[R-(1 << k)+1][k]);
  37. }
  38. int main()
  39. {
  40. while(scanf("%d", &n) == 1 && n)
  41. {
  42. init();
  43. scanf("%d",&q);
  44. int j = 1, x;
  45. scanf("%d", &x);
  46. left[j] = 1;
  47. num[1] = j;
  48. val[1] = x;
  49. cou[1] = 1;
  50. for(int i = 2; i <= n; i++)
  51. {
  52. scanf("%d", &x);
  53. if(x == val[j])
  54. {
  55. num[i] = j;
  56. cou[j]++;
  57. }
  58. else
  59. {
  60. right[j] = i-1;
  61. j++;
  62. val[j] = x;
  63. num[i] = j;
  64. cou[j] ++;
  65. left[j] = i;
  66. }
  67. }
  68. right[j] = n;
  69. init_RMQ(j);
  70. while(q--)
  71. {
  72. int rr,ll;
  73. scanf("%d%d", &ll, &rr);
  74. int R = num[rr], L = num[ll];
  75. if(R == L) printf("%d\n", rr-ll+1);
  76. else
  77. {
  78. int ans = right[L]-ll+1;
  79. ans = max(rr-left[R]+1, ans);
  80. ans = max(ans, RMQ(L+1, R-1));
  81. printf("%d\n",ans);
  82. }
  83. }
  84. }
  85. return 0;
  86. }

uva 11235的更多相关文章

  1. UVA 11235 (游程编码+ST算法)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23846 题目大意:给定一个升序序列,有q次询问,每次询问(L,R) ...

  2. UVA 11235 Frequent values 线段树/RMQ

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

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

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

  4. UVA 11235 频繁出现的数值 RMQ

    题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  5. UVA - 11235 Frequent values

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

  6. UVa 11235 RMQ

    首先讲一下RMQ算法的意思. RMQ(Range Minimum Query,RMQ)范围最小值,给出一个n个元素的数组,计算min(A[L],A[L+1],...,A[R-1],A[R]): 这里运 ...

  7. UVA 11235 Frequent Values ---RMQ

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

  8. UVa 11235 (RMQ) Frequent values

    范围最值问题,O(nlogn)的预处理,O(1)的查询. 这个题就是先对这些数列进行游程编码,重复的元素只记录下重复的次数. 对于所查询的[L, R]如果它完全覆盖了某些连续的重复片段,那么查询的就是 ...

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

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

随机推荐

  1. C#.NET实现Word或Excel文件转为HTML文件

    Word文件转html,返回相对路径 private string GetPathByDocToHTML(string strFile) { if (string.IsNullOrEmpty(strF ...

  2. Codevs 1003 电话连线

    时间限制: 1 s   空间限制: 128000 K   题目等级 : 黄金 Gold 题目描述 Description 一个国家有n个城市.若干个城市之间有电话线连接,现在要增加m条电话线(电话线当 ...

  3. CentOS学习笔记--程序管理

    程序管理 一个程序被加载到内存当中运行,那么在内存内的那个数据就被称为程序(process).程序是操作系统上非常重要的概念, 所有系统上面跑的数据都会以程序的型态存在.那么系统的程序有哪些状态?不同 ...

  4. JavaScript 同源策略

    在JavaScript安全性限制Same-Origin Policy(同源策略)=>JavaScript只能访问与包含它的文档在同一域下的内容. 同源=>域名+协议+端口相同.

  5. FastDFS4 + Ubuntu12安装及部署

    1. 安装libevent 如果需要使用http进行下载,需要安装这个组件. 2. 安装fastdfs 3. 配置fastdfs 4. 安装nginx 问题4.1:安装nginx启动后访问原先资源UR ...

  6. Hbase 0.95.2介绍及下载地址

    HBase是一个分布式的.面向列的开源数据库,该技术来源于Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件系统(File System) ...

  7. jQuery WIN 7透明弹出层效果

    jQuery WIN 7透明弹出层效果,点击可以弹出一个透明层的jquery特效,插件可以调弹出框的宽度和高度,很不错的一个弹出层插件. 适用浏览器:IE8.360.FireFox.Chrome.Sa ...

  8. 卸载CentOS 5.4自带的OpenJDK,配置新的Java环境

    本文CentOS版本为5.4 final,使用图形界面与命令结合的操作方式,由于CentOS 5.4在默认情况下,会安装OpenOffice之类的软件,而这些软件需要Java支持,因此系统会默认安装一 ...

  9. webstorm 10.0.4 注册码

    激活码: UserName:William ===== LICENSE BEGIN ===== 45550-12042010 00001SzFN0n1bPII7FnAxnt0DDOPJA INauvJ ...

  10. 你必须知道的.NET

    作者博客地址:http://www.cnblogs.com/anytao/archive/2008/04/09/anytao_insidenet_center.html 第1章 OO大智慧 1.1对象 ...