上次的湘潭赛的C题,用线段树敲了下还是WA,不知道为何,我已经注意了处理相同数据,然后他们当时用的RMQ。

所以学了下RMQ,感觉算法思想是一样的,RMQ用了DP或者是递推,由单个数到2^k往上推,虽然有部分重叠的,也没关系,因为RMQ是求区间最值嘛

然后这道题目,要把出现次数化为最值,构造一个新的数组来存贮出现次数,每次是在这个数组里面查询。细节处理要注意,比如所求的区间可能就在一个段里面,需要单独判断。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #define N 100010
  5. using namespace std;
  6. int n,q;
  7. int A[N],num[N],lefts[N],rights[N];
  8. int d[N][];
  9. void RMQ_init(const vector<int>& a)
  10. {
  11. int s=a.size();
  12. for (int i=;i<s;i++) d[i][]=a[i];
  13. for (int j=;(<<j)<=n;j++){
  14. for (int i=;i+(<<j)-<n;i++){
  15. d[i][j]=max(d[i][j-],d[i+(<<(j-))][j-]);
  16. }
  17. }
  18. }
  19. int RMQ(int L,int R){
  20. int k=;
  21. while ((<<(k+))<=R-L+) k++;
  22. return max(d[L][k],d[R-(<<k)+][k]);
  23. }
  24. int main()
  25. {
  26. while (scanf("%d",&n))
  27. {
  28. if (!n) break;
  29. scanf("%d",&q);
  30. vector<int> tmp;
  31. int st=;
  32. for (int i=;i<n;i++)scanf("%d",&A[i]);
  33. A[n]=A[n-]+;
  34. for (int i=;i<=n;i++){
  35. if (A[i]!=A[i-]){
  36. tmp.push_back(i-st);
  37. for (int j=st;j<i;j++){
  38. num[j]=tmp.size()-;
  39. lefts[j]=st;
  40. rights[j]=i-;
  41. }
  42. st=i;
  43. }
  44. }
  45. RMQ_init(tmp);
  46. int L,R;
  47. while (q--)
  48. {
  49. scanf("%d%d",&L,&R);
  50. L--;R--;
  51. int ans;
  52. if (num[L]==num[R]) ans=R-L+;
  53. else{
  54. ans=max(R-lefts[R]+,rights[L]-L+);
  55. if (num[L]+<num[R]){
  56. ans=max(ans,RMQ(num[L]+,num[R]-));
  57. }
  58. }
  59. printf("%d\n",ans);
  60. }
  61. }
  62. return ;
  63. }

UVA 11235 RMQ算法的更多相关文章

  1. UVa 11235 RMQ

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

  2. UVa 11235 (RMQ) Frequent values

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

  3. UVA 11235 (RMQ) 频繁出现的数值

    题目大意是给出一个非降序排列的数组,然后n个询问,每次询问一个区间内出现次数最多的数的次数. 首先要弄清楚题目的是一个非降序的数组,那么说明相等的数都会在一起,类似于11223334569这样的,那么 ...

  4. Uva 11235 RMQ问题

    RMQ: 有一个不变的数组,不停的求一个区间的最小值. 使用倍增的思想优化到logN; d(i,j) 表示从 i 开始的,长度为2j的一段元素中的最小值. 那么状态转移方程: d(i,j) = min ...

  5. uva 11235 RMQ范围最大值

    题目大意:给一个整数上升序列,对于一系列询问区间(i,j),回答这段区间出现次数最多值所出现的次数. 分析:一个上升序列,相同的值聚集在一起,把相同的值的区间看作一个整体,假设这样的整体有n个,把他们 ...

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

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

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

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

  8. UVA 11235 Frequent values 线段树/RMQ

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

  9. UVa 12299 RMQ with Shifts(移位RMQ)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: "Times New ...

随机推荐

  1. pythono整数和字符串魔法方法

    1.整数(int) a = 1 b = 2 c = 3 d = 4 e = 5u a1 = a.bit_length() b1 = b.bit_length() c1 = c.bit_length() ...

  2. Lesson 3 Matterhorn man

    What was the main objective of early mountain climbers? Morden alpinists try to climb mountains by a ...

  3. 【Unity】双击物体

    using UnityEngine; using System.Collections; using System; public class Click_yushe : MonoBehaviour ...

  4. syx学习笔记

    SYX复活了,在悲痛之际,希望能让自己获得更多的知识,更有进步,所以留此博客 数学 推荐blog: 1 2 原根表 FFT(快速傅里叶变换) 2019/12/05 √ 博客 blog 题目 Q1 NT ...

  5. 三 Hibernate持久化状态&主键生成策略

    持久化类 持久化:将内存中的一个对象持久化到数据库中的过程 持久化类:Java类+映射文件.Java中一个类与数据库的表建立了映射关系,那么这个类称为持久化类. 持久化类的编写规则: 对持久化类提供一 ...

  6. 关于页面跳转之后获取不到session数据的问题

    暂时的解决方法有两种,亲测有效: 方法一:  将页面跳转方式由a标签改为请求转发request.getRequestDispatcher("stu_list.jsp").forwa ...

  7. ls查看所有文件

    ls -al   查看所有文件,包括隐藏文件

  8. Console-terminal-tty-shell-kernel

    Console-terminal-tty-shell-kernel 1. 先看图表     1.1 简表     1.2 shell与内核的示意图     1.3 Console-terminal-t ...

  9. EXTjs开发————优雅的用extjs写一个柱状图

    简单的写法,extjs可以直接引用插件来写,这里将我发表在百度文库的文档简述下来,有兴趣也可以关注我的百度文库,ID:该用户已失踪. 主要部分的代码: $(document).ready(functi ...

  10. 课程报名 | 基于模型训练平台快速打造 AI 能力

    我们常说的 AI 通用能力往往不针对具体的行业应用,而是主要解决日常或者泛化的问题,很多技术企业给出的方案是通用式的,比如通用文字识别,无论识别身份证.驾驶证.行驶证等,任何一张图片训练后的模型都会尽 ...