poj 3368 Frequent values--RMQ
来源:互联网 发布:周杰伦英雄 知乎 编辑:程序博客网 时间:2024/05/19 06:38
原题链接:http://poj.org/problem?id=3368
题意:n个数,q个查询,每次查询,两个下标low,high,求在下标之间的数的频率的最大值。
分析:因为是求出频率的最大值,不放设f数组是频率,预先求出即可。对于任意的low,high,我们分为两部分,左部分连续相同的值,和剩下的右部分。左部分连续相同的个数很容易求出,右部分只需求出对应的f数组的最大值即可,右部分用RMQ来做。
AC代码:
#define _CRT_SECURE_NO_DEPRECATE#include<iostream>#include<vector>#include<cstring>#include<queue>#include<stack>#include<algorithm>#include<cmath>#include<string>#include<stdio.h>#define INF 1000000000#define EPS 1e-6using namespace std;int n, q;int a[100005];int f[100005];int maxx[100005][20];void RMQ(){ for (int i = 1; i <= n; i++) maxx[i][0] = f[i]; int k = log(double(n)) / log(2.0); for (int j = 1; j <= k; j++) for (int i = 1; i + (1 << j) - 1 <= n; i++) maxx[i][j] = max(maxx[i][j - 1], maxx[i + (1 << (j - 1))][j - 1]);}int query(int low, int high){ if (low > high) return 0; int k = log(double(high - low + 1)) / log(2.0); return max(maxx[low][k], maxx[high - (1 << k) + 1][k]);}int main(){ while (~scanf("%d", &n) && n) { a[0] = INF; scanf("%d", &q); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); if (a[i] == a[i - 1]) f[i] = f[i - 1] + 1; else f[i] = 1; } RMQ(); int low, high; for (int i = 0; i < q; i++) { scanf("%d%d", &low, &high); int num = 0; int t = low; while (t <= high&&a[t] == a[t - 1]) { t++; num++; } printf("%d\n", max(num, query(t, high))); } } return 0;}
1 0
- poj 3368 Frequent values //RMQ
- POJ 3368 Frequent Values(RMQ)
- [POJ 3368]Frequent values(RMQ)
- Frequent values - POJ 3368 RMQ
- POJ--3368--Frequent values【RMQ】
- POJ 3368 Frequent values (RMQ)
- POJ 3368 Frequent values(RMQ)
- POJ 3368 Frequent values (RMQ)
- POJ 3368 Frequent Values(RMQ)
- POJ 3368 Frequent values RMQ
- POJ 3368 Frequent values (RMQ)
- POJ 3368 Frequent values RMQ
- poj 3368 Frequent values(RMQ)
- poj 3368 Frequent values--RMQ
- POJ 3368 Frequent values RMQ / 线段树
- poj 3368 Frequent values(RMQ问题)
- POJ 3368 Frequent values (UVA 11235)(RMQ)
- 【RMQ|ST】POJ-3368 Frequent values
- Azure问题与解答
- C++从配置文件读取路径,然后在程序中使用的方法
- hadoop之shuffle------>soft和combiner
- 记单词008
- Python科学计算二
- poj 3368 Frequent values--RMQ
- vim设置编码为urf-8
- eclipse中java工程打包war文件
- 【Android小品】OpenCV配置 之一 CMake详解(基于最新平台AS 2.2)
- HTTP 请求头中的 X-Forwarded-For
- 【67.24%】【codeforces 745A】Hongcow Learns the Cyclic Shift
- MySQL01 --创建数据库&插入数据
- 前端工程与性能优化
- 【凡凡说项目】去当一个技术总监吧