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 ...
随机推荐
- charles录制https请求
之前一直用windows系统,抓包什么的都是用的fiddler或者wireshark,操作比较简单,扩展性也比较强,现在因为工作原因换了mac,在网上一直没有找到fiddler的mac版本,就只能切换 ...
- Javascript格式化并高亮xml字符串
Javascript格式化并高亮xml字符串 两个关键点 使用DOMParser解析xml 递归遍历xml树,按格式输出每一个节点 关于使用DOMParser 此方法目前在IE9以上和其它浏览器里都是 ...
- Ubuntu设置DNS服务
有时候安装完Ubuntu系统,源换好好还是不能更新,软件也不能下, 配置好IP,ping 1.1.1.1是通的,ping 域名就不通了,这是没有DNS解析域名的结果 一.Server版: 对于Ubun ...
- html5新特性localStorage和sessionStorage
HTML5 提供了两种在客户端存储数据的新方法: localStorage: (1)它的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失. (2)它的容量大小是5M作用 ...
- 【Java】 秒转时分秒天
总有时候会有些需求, 需要用到秒, 比如 JedisCluster 设置过期时间 现在有一个需求是 : 查询接口的缓存设置有效期为:1天+随机时间 基本可以按以下来做: package com.lwc ...
- 四、Django之模型与管理后台-Part 2
一.数据库安装 打开mysite/settings.py配置文件,这是整个Django项目的设置中心.Django默认使用SQLite数据库,因为Python源生支持SQLite数据库,所以你无须安装 ...
- TPO-17 C2 Reschedule part-time job in campus dining hall
TPO-17 C2 Reschedule part-time job in campus dining hall 第 1 段 1.Listen to a conversation between a ...
- 使用calendar日历插件实现动态展示会议信息
效果图如下,标红色为有会议安排,并跳转详细会议信息页面. html页面 <%@ page contentType="text/html;charset=UTF-8"%> ...
- 天马行空-Ops平台建设概述
1 概述 什么是Ops平台,Ops平台的目标是什么,建设的考虑点有哪些?本章节以实际生活中医院的例子来进行各形象的阐述. 医院包含各种诊断治疗设备,病历库,医生.一个孕妇需要到医院 ...
- visual studio 2010 和 VSS(Visual SourceSafe)的连接使用
visual studio 2010 和 VSS(Visual SourceSafe)的连接使用 1. 在visual vstudio中选择使用VSS插件: 2. 使用VSS进行源码管理: ...