博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA - 11235 —— Frequent values 【RMQ】
阅读量:4554 次
发布时间:2019-06-08

本文共 930 字,大约阅读时间需要 3 分钟。

题解:

  1. 游程编码(将序列转化为(value, num)的一段一段的键值对形式)后,将问题转化为几乎是一个RMQ问题,仅有一些细节要单独考虑

  2. 如果查询的两个下标l, r属于同一段键值对,那么答案就是(r - l + 1);否则,答案是三个(或两个)值的最大值,详情见代码:

#include 
#include
#include
#include
#define INF 0x3f3f3f3fusing namespace std;const int MAXN = 100000 + 5, MAXK = 17 + 5;int d[MAXN][MAXK];int val[MAXN], num[MAXN];int id[MAXN], L[MAXN], R[MAXN];int size;void build(int n){ for(int i=1; i<=n; i++) { d[i][0] = num[i]; } for(int j=1; (1<
<= n; j++) { for(int i=1; i + (1 << j) - 1 <= n; i++) { d[i][j] = max(d[i][j-1], d[i+(1<<(j-1))][j-1]); } }}int query(int l, int r){ if(l>r) return -INF; // 是必要的,因为仔细考虑一下,是有可能出现该异常的! int w = r - l + 1; int x = 0; while((1<
<= w) x++; return max(d[l][x], d[r-(1<

 

  

转载于:https://www.cnblogs.com/AcIsFun/p/5456951.html

你可能感兴趣的文章
Hadoop and net core a match made in docker
查看>>
Javaweb项目构建常见问题
查看>>
SQLServer 错误: 15404,维护计划无法执行
查看>>
要完善的内容
查看>>
【codeforces】【比赛题解】#869 CF Round #439 (Div.2)
查看>>
PHP之session_start()详解
查看>>
tcp异常断开的重连解决方法
查看>>
Python全栈Day 20部分知识点
查看>>
sptring boot 修改默认Banner
查看>>
安装mysql时 Write configuration file 错误的解决办法
查看>>
ReCAPTCHA & 手势验证
查看>>
Chrome & QR Code Reader
查看>>
css & background & svg
查看>>
【PAT】B1067 试密码(20 分)
查看>>
shell中字体变色
查看>>
机器学习---文本特征提取之词袋模型(Machine Learning Text Feature Extraction Bag of Words)...
查看>>
linux c fprintf()
查看>>
动态规划之石子归并
查看>>
Swift 表达式
查看>>
CF1063A Oh Those Palindromes
查看>>