Frequent values UVA - 11235(巧妙地RMQ)
题意:
给出一个非降序排列的整数数组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)的更多相关文章
- 图灵杯 E 简单的RMQ(UVA 11235)(RMQ)
E: 简单的RMQ 时间限制: 2 Sec 内存限制: 64 MB提交: 934 解决: 165[提交][状态][讨论版] 题目描述 给定一个数组,其中的元素满足非递减顺序.任意给定一个区间[i, ...
- RMQ算法 以及UVA 11235 Frequent Values(RMQ)
RMQ算法 简单来说,RMQ算法是给定一组数据,求取区间[l,r]内的最大或最小值. 例如一组任意数据 5 6 8 1 3 11 45 78 59 66 4,求取区间(1,8) 内的最大值.数据量小 ...
- UVA 11235 Frequent values(RMQ)
Frequent values TimeLimit:3000Ms , ... , an in non-decreasing order. In addition to that, you are gi ...
- UVA 11235 Frequent values 线段树/RMQ
vjudge 上题目链接:UVA 11235 *******************************************************大白书上解释**************** ...
- UVA - 11235 Frequent values
2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...
- [POJ] 3368 / [UVA] 11235 - Frequent values [ST算法]
2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...
- 数据结构(RMQ):UVAoj 11235 Frequent values
Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. I ...
- poj 3368 Frequent values(RMQ)
/************************************************************ 题目: Frequent values(poj 3368) 链接: http ...
- POJ 3368 Frequent values (基础RMQ)
Frequent values Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14742 Accepted: 5354 ...
随机推荐
- Swift - 重写导航栏返回按钮
// 重写导航栏返回按钮方法 func configBackBtn() -> Void { // 返回按钮 let backButton = UIButton(type: .custom) // ...
- 实时备份工具之inotify+rsync
1.inotify简介 inotify 是一个从 2.6.13 内核开始,对 Linux 文件系统进行高效率.细粒度.异步地监控机制, 用于通知用户空间程序的文件系统变化.可利用它对用户空间进行安全. ...
- spring源码-aop动态代理-5.3
一.动态代理,这是一个很强大的东西哦.研发过程中我们会常用很多业务类,但是存在一个问题.如何在不修改源码逻辑的情况下,加入自己的相关逻辑.比如异常处理,日志记录等! 二.Java动态代理的两种方式JD ...
- 基于Spring的最简单的定时任务实现与配置(三)--番外篇 cron表达式的相关内容
本来这篇文章是会跟本系列的前两篇文章一起发布的.但是,昨天在找资料总结的时候遇到了一点意外,就延后了一些. 本篇的内容主要参考了 这篇博文:http://www.cnblogs.com/junrong ...
- 关于js回调方法 js递归时使用方法
js中递归调用本身可以这样: function a1(n){ a1(n)}但是如果需要在参数n进行自增的情况下判断会出错: function a1(n){ if(n>10) return 'aa ...
- ddms+adt+jdk的安装及调试开发安卓
_______ ddms+adt+jdk的安装及调试开发安卓 目录 阐述 1 1 jdk安装 1 2 sdk安装 3 3 Eclipse安装 6 4 ADT安装 10 5 Ddms使用 16 ...
- sql 命令使用简单记录
半个月前就想记下用过的SQL命令的!!! 主题: 按时间查询: https://blog.csdn.net/hejpyes/article/details/41863349 左关联: se ...
- mysql查看锁表与解锁
查看锁表语句 show OPEN TABLES where In_use > 0; 找到锁表的进程 show processlist; 删除锁表进程 kill 51045123;
- Yii2 配置request组件解析 json数据
在基础版本的config目录下 web.php 或者高级版config目录下的main.php中配置 'components' =>[ 'request' => [ 'parsers' = ...
- Echarts数据可视化全解
点击进入 Echarts数据可视化全解