1. 《算法竞赛入门经典-训练指南》P198
  2. 记录一下区间的左右边界就可以了
  3. #include <iostream>
  4. #include <stack>
  5. #include <queue>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cmath>
  9. #include <set>
  10. #include <vector>
  11. #include <cstring>
  12. #include <algorithm>
  13.  
  14. #define INF 0x7fffffff
  15. #define N 100010
  16. #define M 1000010
  17. #define LL long long
  18. #define mod 95041567
  19.  
  20. using namespace std;
  21.  
  22. int arr[N];
  23. int num[N][3];
  24. int dp[N][20];
  25.  
  26. void RMQ_init(int len){
  27. for(int j = 1; (1 << j) <= len; ++ j)
  28. for(int i = 1; i + (1 << j) - 1 < len; ++ i)
  29. dp[i][j] = max(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]);
  30. }
  31.  
  32. int RMQ(int L, int R){
  33. if(R < L) return 0;
  34. else if(R == L) return dp[R][0];
  35. int k = 0;
  36. while((1 << (k + 1)) <= R - L + 1) ++ k;
  37. return max(dp[L][k], dp[R - (1 << k) + 1][k]);
  38. }
  39.  
  40. int main()
  41. {
  42. int n, q;
  43. // freopen("in.txt","r",stdin);
  44. while(scanf("%d", &n) != EOF){
  45. if(! n) break;
  46. scanf("%d", &q);
  47. for(int i = 0; i < n; ++ i) scanf("%d", &arr[i]);
  48. for(int i = 0; i <= n + 2; ++ i)
  49. for(int j = 0; j <= 20; ++ j)
  50. dp[i][j] = 0;
  51. arr[n] = INF;
  52. int p = 0;
  53. int len = 0;
  54. for(int i = 1; i <= n; ++ i)
  55. if(arr[i] != arr[i - 1]){
  56. for(int j = p; j <= i - 1; ++ j){
  57. num[j][0] = i - 1;
  58. num[j][1] = p;
  59. num[j][2] = len;
  60. }
  61. dp[len ++][0] = i - p;
  62. p = i;
  63. }
  64. RMQ_init(len);
  65. int L, R;
  66. for(int i = 0; i < q; ++ i){
  67. scanf("%d %d", &L, &R);
  68. if(arr[L - 1] == arr[R - 1]){
  69. printf("%d\n", R - L + 1);
  70. continue;
  71. }
  72. //printf("%s\n", "++");
  73. p = num[L - 1][0] - (L - 1) + 1;
  74. p = max(p, R - num[R - 1][1]);
  75. p = max(p, RMQ(num[L - 1][2] + 1, num[R - 1][2] - 1));
  76. printf("%d\n", p);
  77. }
  78. }
  79. return 0;
  80. }

11235 - Frequent values的更多相关文章

  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

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

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

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

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

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

  5. UVA 11235 Frequent values(RMQ)

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

  6. UVA 11235 Frequent values 线段树/RMQ

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

  7. UVA 11235 Frequent Values ---RMQ

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

  8. POJ 3368 & UVA 11235 - Frequent values

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

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

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

随机推荐

  1. SGU 187 - Twist and whirl -- want to cheat

    原题地址:http://acm.sgu.ru/problem.php?contest=0&problem=187 太开心啦!!!!这道题从2013年开始困扰我!!今天晚上第四次下定决心把它写一 ...

  2. BrowserSync,调试利器--自动刷新(转

    ---恢复内容开始--- 请想象这样一个场面:你开着两个显示器,一边是IDE里的代码,另一边是浏览器里的你正在开发的应用.此时桌上还放着你的手机,手机里也是这个开发中的应用.然后,你新写了一小段代码, ...

  3. hdu 4435 charge-station

    // 题意 从1出发逛完N个点回到出发点 要在这N个点选择性建设加油站 车每次加满油最多可以行使D米// 然后最少要花多少钱才能达到上述要求// 注意到 第i个城市的花费是 2^(i-1) 所以 我就 ...

  4. String.IsNullOrEmpty 方法

    参数 value:一个String引用 返回值 如果 value 参数为 空引用(在 Visual Basic 中为 Nothing) 或空字符串 (""),则为 true:否则为 ...

  5. Hibernate优化

    前言 在一般情况下,Hibernate需要将执行转换为SQL语句从而性能低于JDBC.但是在经过比较好的性能优化之后,性能还是让人相当满意的,特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDB ...

  6. 【转】C++ 智能指针详解

    一.简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 ...

  7. 高性能Server---Reactor模型-----Socket

    高性能Server---Reactor模型   原文地址:http://www.ivaneye.com/2016/07/23/iomodel.html 无处不在的C/S架构 在这个充斥着云的时代,我们 ...

  8. hdu 3341(ac自动机+状态压缩)

    题意:容易理解... 思路:首先一开始容易想到要用到dp,开设一个dp[41][41][41][41][501]的数组来解决,但是明显内存已经超出范围了,于是就想如何减少内存呢?只要知道A.T.C.G ...

  9. Nginx源码安装及调优配置

    导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前的优 ...

  10. 动态 SQL

    MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...