题意:

  给出一个非降序排列的整数数组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. day 3 模块

    1.系统自带模块  xxx.py 文件 就是模块 ### 模块存放位置 In [1]: import os In [2]: os.__file__ Out[2]: '/usr/lib/python3. ...

  2. 【SCOI2009】迷路

    题面 题解 如果给我们的是一个邻接矩阵,那么直接给邻接矩阵\(T\)次幂即可. 这里的图有边权,那么我们就将它拆成\(9\)个点即可. 代码 #include<cstdio> #inclu ...

  3. Jmeter4.0安装

    1.检查安装环境 1.1 JDK要求 JDK版本:1.8 1.2 检查是否安装JDK win + R 快捷键打开运行,输入 cmd 打开面板,在面板中输入 java -version,出现如下信息,即 ...

  4. 423. Valid Parentheses【LintCode java】

    Description Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine ...

  5. 001----Mysql隔离级别

    一:事务隔离级别 mysql数据库的隔离界别如下: 1, READ UNCOMMITTED(未提交读) 事务中的修改,即使没有提交,对其它事务也是可见的.  这样会造成脏读(Dirty Read)的问 ...

  6. 【PMP考试专栏】01、五大过程组和十大知识领域

  7. 4星|《财经》2018年第15期:电动飞机、无人小飞机、AI无人机

    <财经>2018年第15期 总第532期 旬刊 本期主题是AI.有多篇国内AI行业的比较深入的调查报告,比较有意思的有:电动飞机.无人小飞机.AI无人机.欧盟通用数据保护条例.Amazon ...

  8. css各种鼠标手型集合

    比较齐全的鼠标手型css在国内的网站上是没搜到这么全的比如说哪个禁止的手型:鼠标往下移动即可看到效果: html代码如下: <h1>Cursors</h1> <div c ...

  9. sklearn中的交叉验证(Cross-Validation)

    这个repo 用来记录一些python技巧.书籍.学习链接等,欢迎stargithub地址sklearn是利用python进行机器学习中一个非常全面和好用的第三方库,用过的都说好.今天主要记录一下sk ...

  10. 王者荣耀交流协会——第7次Scrum会议

    照片由刘耀泽同学拍摄 ,王露芝同学(外援)没有参加本次会议. 要求2 : 时间跨度:2017年10月19日 15:05 - 15:20 共计15分钟 要求3 : 地点:计算机楼107教室 要求4 : ...