https://vjudge.net/problem/UVA-11235

题意:

给出一个非降序排列的整数数组a1,a2,...,an,你的任务是对于一系列询问(i,j),回答ai,ai+1,...aj中出现次数最多的值所出现的次数。

思路:

首先对整个数组进行游程编码,比如(-1,1,1,2,2,2,4)就可以编码成(-1,1),(1,2),(2,3),(4,1),其中(a,b)表示有b个连续的a。

用count[i]表示第i段的出现次数,num[p]表示第p个数所在的段,left[i],right[i]表示第i段的左右坐标值。

 #include<iostream>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = + ; int n, q, ret;
int a[maxn];
int count[maxn];
int num[maxn];
int left[maxn];
int right[maxn];
int d[maxn][]; void RMQ_init()
{
for (int i = ; i <= ret; i++)
d[i][] = ::count[i];
for (int j = ; ( << j) <= ret;j++)
for (int i = ; i + ( << j) <= ret; i++)
d[i][j] = max(d[i][j - ], d[i + ( << (j-))][j - ]);
} int RMQ(int L, int R)
{
int k = ;
while (( << (k + )) <= R - L + ) k++;
return max(d[L][k], d[R - ( << k) + ][k]);
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (cin >> n && n)
{
cin >> q;
for (int i = ; i <= n; i++)
cin >> a[i];
ret = ;
for (int i = ; i <= n; i++)
{
num[i] = ret;
::left[ret] = i;
int cnt = ;
while (a[i] == a[i + ])
{
num[i + ] = ret;
cnt++;
i++;
}
::right[ret] = i;
::count[ret] = cnt;
ret++;
}
RMQ_init();
int L, R;
int ans;
for (int i = ; i < q; i++)
{
cin >> L >> R;
int k1 = num[L];
int k2 = num[R];
ans = ;
if (k1 == k2) cout << R - L + << endl;
else if (k2 - k1 == )
{
ans = max(::right[k1] - L + , R - ::left[k2] + );
cout << ans << endl;
}
else
{
ans = max(::right[k1] - L + , R - ::left[k2] + );
ans = max(ans, RMQ(k1+, k2-));
cout << ans << endl;
}
}
}
}

UVa 11235 频繁出现的数值的更多相关文章

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

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

  2. UVA 11235 Frequent values 线段树/RMQ

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

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

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

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

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

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

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

  6. UVA 11235 Frequent values(RMQ)

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

  7. Uva 11235 RMQ问题

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

  8. UVA - 11235 Frequent values

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

  9. UVa 11235 RMQ

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

随机推荐

  1. Win10+vs2012+cuda8.0的安装与配置

    安装环境说明:NVDIA GeForce 930M.Intel(R) HD Graphics 520 显卡和cuda需要兼容匹配,我一开始下载的cuda6.5无法安装,所以又重新下了比较新的cuda8 ...

  2. 万恶之源 - Python运算符与编码

    格式化输出 现在有个需要我们录入我们身边好友的信息,格式如下: ------------ info of Alex Li ---------- Name : Alex Li Age : 22 job ...

  3. Spark性能优化(二)

    资源调优 调优概述 在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要 ...

  4. Must be between v0 and v15, inclusive解决办法

    invoke-static 改为invoke-static/range

  5. 从游戏开发到web前端——仅仅只是开始

    文章开头,请允许我随便扯扯. 一来,开头从来都是最难写的,二来,描述我现在的心情和状态以及工作背景啥的,对于大家理解后面的内容也许会有所帮助~ 2012年211大学毕业,工作4年了,一直都是做游戏前端 ...

  6. C# 拓展方法实例

    namespace BenJi{ class Program { static void Main(string[] args) { Console.WriteLine("你要调试程序吗?y ...

  7. 修改SQL Server 的排序规则(转)

    转自http://jimshu.blog.51cto.com/3171847/1095780/ 一.修改SQL Server服务器(实例)的排序规则 以下实验使用了SQL Server 2008 R2 ...

  8. Web前端开发推荐阅读书籍、学习课程下载

    转自http://www.xuanfengge.com/fe-books.html 前言 学校里没有前端的课程,那如何学习JavaScript,又如何使自己成为一个合格的前端工程师呢? 除了在项目中学 ...

  9. GetLastError函数

      错误代码各个位数的意义:GetLastError函数返回值!SetLastError可是设置这个错误代码. 位 31-30 29 28 27-16 15-0 内容 严重性 Micorsoft/ 客 ...

  10. Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2) D. Something with XOR Queries

    地址:http://codeforces.com/contest/872/problem/D 题目: D. Something with XOR Queries time limit per test ...