题意:

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

解析:

白书p198

  

  

  其实意思就是把每个值转换为次数 因为相等的值又是连续的  然后标记每个值的下标所对应的次数数组中的下标  rmq求区间次数的最大值

  因为不易更新,所以把left和right中的R和L啥的变为其对应的次数段  即num[L]  num[R ]

  

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define rep(i, a, n) for(int i=a, i<n; i++)
#define lap(i, a, n) for(int i=n; i>=a; i--)
#define lep(i, a, n) for(int i=n; i>a; i--)
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = , INF = 0x7fffffff;
int d[maxn][], lef[maxn], righ[maxn], num[maxn], val[maxn], cnt[maxn], a[maxn];
int n, q, len; void RMQ_init()
{
rap(i, , len) d[i][] = cnt[i];
for(int j=; (<<j) <= len+; j++)
for(int i=; i+(<<j)- <= len; 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()
{
while(~scanf("%d", &n) && n)
{
scanf("%d", &q);
len = ;
mem(cnt, );
scanf("%d", &a[]);
val[len] = a[]; //标记位置为次数是哪一个数的
cnt[len] = ; //统计位置为len的次数
num[] = len; //原数组下标对应在次数数组的哪一个下标
lef[] = ; //lef[i]代表次数数组中下标为len的次数在原数组中 连续区间的左端点值的下标(因为每个相等的元素是连续的)
rap(i, , n)
{
scanf("%d", &a[i]);
if(a[i] == a[i-])
{
cnt[len]++;
num[i] = len;
}
else
{
righ[len] = i-;
len++;
val[len] = a[i];
cnt[len] = ;
num[i] = len;
lef[len] = i;
}
}
RMQ_init();
int l, r;
while(q--)
{
scanf("%d%d", &l, &r);
if(num[l] == num[r])
printf("%d\n", r-l+);
else
{
int ans = ;
if(num[l]+<=num[r]-)
ans=RMQ(num[l]+,num[r]-);
ans = max(ans,max(righ[num[l]]-l+,r-lef[num[r]]+));
printf("%d\n", ans);
} }
} return ;
}

  

Frequent values UVA - 11235(巧妙地RMQ)的更多相关文章

  1. 图灵杯 E 简单的RMQ(UVA 11235)(RMQ)

    E: 简单的RMQ 时间限制: 2 Sec  内存限制: 64 MB提交: 934  解决: 165[提交][状态][讨论版] 题目描述 给定一个数组,其中的元素满足非递减顺序.任意给定一个区间[i, ...

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

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

  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. 数据结构(RMQ):UVAoj 11235 Frequent values

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

  8. poj 3368 Frequent values(RMQ)

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

  9. POJ 3368 Frequent values (基础RMQ)

    Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14742   Accepted: 5354 ...

随机推荐

  1. OpenCV中Mat操作clone() 与copyto()的区别

    OpenCV中Mat操作clone() 与copyto()的区别 // Mat is basically a class with two data parts: the matrix header ...

  2. angular中的$http服务

    $http是ng内置的一个服务.是简单的封装了浏览器原生的XMLHttpRequest对象. 写法1 $http({ method: "GET", url: 'data.json' ...

  3. 纯CSS3实现旋转木马

    test.html: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  4. pyquery详细用法

    python爬虫之PyQuery的基本使用   PyQuery库也是一个非常强大又灵活的网页解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你非常绝佳的选择,PyQue ...

  5. Java Basic&Security Tools

    JDK Tools and Utilities Basic Tools These tools are the foundation of the JDK. They are the tools yo ...

  6. linux上open-vswitch安装和卸载

    一. ovs 从源码编译安装: 安装依赖项: # apt-get install make # apt-get install gcc # apt-get install build-essentia ...

  7. PytorchZerotoAll学习笔记(五)--逻辑回归

    逻辑回归: 本章内容主要讲述简单的逻辑回归:这个可以归纳为二分类的问题. 逻辑,非假即真.两种可能,我们可以联想一下在继电器控制的电信号(0 or 1) 举个栗子:比如说你花了好几个星期复习的考试(通 ...

  8. 斯坦福大学机器学习(Andrew Ng@2014)--自学笔记

    今天学习Andrew NG老师<机器学习>之6 - 6 - Advanced Optimization,做笔记如下: 用fminunc函数求代价函数最小值,分两步: 1.自定义代价函数 f ...

  9. 作业 20181120-3 Beta发布

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2408 小组介绍 组长:付佳 组员:张俊余 李文涛 孙赛佳 田良 于洋 段 ...

  10. 20172332『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172326康皓越 20172313余坤澎 20172332于欣月 小组编程照片 设计思路 设计一个生成符号 ...