[uva11235]Frequent values(RMQ,ST,离散化)
题目链接:https://vjudge.net/problem/UVA-11235
题意:给一串不递减数字,q次询问,每次查询[l,r]内出现次数最多的数字出现的次数。
查询分两部分:一部分是[l,r]为同一个数的区间,另一部分则是在上下界处截取一部分的情况。
首先离散化,后用l[],r[],v[]分别记录每一段相同数字的左右区间和出现次数。v可以直接由r-l+1更新得到。
第一部分更新ret后,接下来的rmq分三部分:
第一部分查询左边界截取一部分的数字的当前长度,第二部分查询右边界的,第三部分查询删掉左右边界后中间完整的部分的最值。
ST表维护最值就好了。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 typedef long long LL; 5 const int maxn = 100100; 6 7 int n, m, q; 8 int a[maxn]; 9 int h[maxn], hcnt; 10 11 int l[maxn], r[maxn], v[maxn]; 12 int dp[maxn][33]; 13 14 void st(int* b) { 15 for(int i = 1; i <= m; i++) dp[i][0] = b[i]; 16 int k = int(log(n+1.0)/log(2.0)); 17 for(int j = 1; j <= k; j++) { 18 for(int i = 1; i + (1 << j) - 1 <= m; i++) { 19 dp[i][j] = max(dp[i][j-1], dp[i+(1<<(j-1))][j-1]); 20 } 21 } 22 } 23 24 int query(int l, int r) { 25 int k = int(log(r-l+1.0)/log(2.0)); 26 return max(dp[l][k], dp[r-(1<<k)+1][k]); 27 } 28 29 int id(int x) { 30 return lower_bound(h, h+hcnt, x) - h + 1; 31 } 32 33 int main() { 34 // freopen("in", "r", stdin); 35 while(~scanf("%d",&n) && n) { 36 scanf("%d", &q); 37 memset(l, 0, sizeof(l)); 38 memset(r, 0, sizeof(r)); 39 memset(v, 0, sizeof(v)); 40 m = -1; 41 int pre = -1, ll = 1, rr, cnt = 0; 42 for(int i = 1; i <= n; i++) { 43 scanf("%d", &a[i]); 44 h[i-1] = a[i]; 45 } 46 sort(h, h+n); hcnt = unique(h, h+n) - h; 47 for(int i = 1; i <= n; i++) a[i] = id(a[i]); 48 for(int i = 1; i <= n; i++) { 49 if(pre != a[i]) { 50 l[++m] = ll, r[m] = i - 1; 51 v[m] = r[m] - l[m] + 1; 52 pre = a[i]; 53 ll = i; 54 cnt = 1; 55 } 56 else rr++, cnt++; 57 } 58 l[++m] = ll, r[m] = n; 59 v[m] = r[m] - l[m] + 1; 60 st(v); 61 while(q--) { 62 scanf("%d %d", &ll, &rr); 63 if(a[ll] == a[rr]) { 64 cout << rr - ll + 1 << endl; 65 continue; 66 } 67 int ret = max(0, r[a[ll]]-ll+1); 68 ret = max(ret, rr-l[a[rr]]+1); 69 if(a[ll] + 1 <= a[rr] - 1) ret = max(ret, query(a[ll]+1, a[rr]-1)); 70 cout << ret << endl; 71 } 72 } 73 return 0; 74 }
转载于:https://www.cnblogs.com/kirai/p/6786282.html
[uva11235]Frequent values(RMQ,ST,离散化)相关推荐
- POJ 3368 Frequent values 【ST表RMQ 维护区间频率最大值】
传送门:http://poj.org/problem?id=3368 Frequent values Time Limit: 2000MS Memory Limit: 65536K Total S ...
- POJ 3368 Frequent values (RMQ)
题目链接:http://poj.org/problem?id=3368 题目大意: 给出一个n个数长度的串. m个询问 求出给定范围内的最大连续字符串的长度 方法: RMQ模板, 记录每一个位置的数连 ...
- poj 3368 Frequent values rmq
题意:给你一串数列,然后给你一个起终位置对,问你这个段序列里出现最多的出现了几次. 思路:一段序列里,无非就是三种情况,1,一组相同的数,2两组相同,3,3组或者更多组数,这样我们队每一组数的开头结束 ...
- UVA11235 - Frequent values(游程编码+线段树)
题目链接: https://vjudge.net/problem/UVA-11235 题目大意: 给定一个递增序列,询问一段区间内出现频率最多的数出现的次数. 解题过程: 之前图灵杯比赛的题,当时照着 ...
- UVA 11235 Frequent values(RMQ)
Frequent values TimeLimit:3000Ms You are given a sequence of n integers a1 , a2 , ... , an in non-de ...
- 【线段树】FREQUENT - Frequent values(luogu-SP1684 / poj 3368)
FREQUENT - Frequent values luogu-SP1684 poj 3368 题目大意: 有一个单调不降序列,让你求出某些区间内的出现次数最多的数出现的次数(有多组数据,以0结尾) ...
- Frequent values【线段树】
Frequent values UVA - 11235 题目传送门 题目大意:给出一个非降序的整数数组a1,a2,a3...an,你的任务是对一系列的询问(i,j),回答ai,ai+1,ai+2... ...
- 求LCA的四种方法(暴力,倍增,RMQ+ST,Tarjan)
目录 P3379 [模板]最近公共祖先(LCA) 暴力 倍增法 RMQ+ST Tarjan 四个方法的优缺点比较 P3379 [模板]最近公共祖先(LCA) 暴力 操作步骤: 求出每个结点的深度: 询 ...
- 倍增算法入门 超详细解答+LCA+RMQ(ST表)+例题剖析
目录 一.倍增算法 二.倍增算法的应用:求LCA(最近公共祖先)附模板题 三.倍增算法的应用:RMQ 问题(ST表)附模板题 一.倍增算法 要了解倍增之前,强烈建议大家先看一下这位大佬对倍增的解释:[ ...
- RMQ ST算法简介
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...
最新文章
- EXCEL公式、函数、图表应用技巧800问
- 支持字母数字下划线和中文的正则
- MongoDB 文档的更新操作
- 九、装配bean--通过properties文件注入值
- 2DToolkit官方文档中文版打地鼠教程(一):初始设置
- LeetCode之旋转数组
- Javascript String对象
- 如何禁止文本框输入,但是要传值
- python网络蜘蛛
- matlab与数学模型相结合例题,数学知识、数学建模、现代数学软件关系 与结合...
- 高通QFIL烧录错误解决方法
- 手机b站封面提取网站_手机b站封面自定义图片大全及获取bilibili视频封面提取网站网址...
- Word前几页是罗马数字,后面是阿拉伯数字怎么设置
- 晶圆划片如何提高切割品质?陆芯半导体告诉你
- 二元函数最大最小值定理证明_Von Neumann最小最大值定理的归纳法证明
- android端使用百度地图
- TDMA噪音产生机制及抑制
- java文字版格斗游戏。
- 【快速上手教程1】开源编队无人机-开机测试
- GBase 8c 权限说明
热门文章
- phpstud使用教程_phpStudy2017使用教程,自定义php版本功能上线!
- java 快速排序_面试必不可少的几大排序算法,你掌握了吗?
- php redis ip查找,PHP实现redis限制单ip、单用户的访问次数功能示例
- redis数据类型之sorted set
- django的 信号
- Node.js 4.0 中的 ES 6 特性介绍
- Dev Express 安装
- 从“如何设计用户超过1亿的应用”说起----数据库调优实战
- Visual Entity 使用(四)添加、删除属性
- 日常笔记(持续更新)