uva 11235 - Frequent values(RMQ)
来源:互联网 发布:软件测试知识点 编辑:程序博客网 时间:2024/05/21 07:57
题目链接:uva 11235 - Frequent values
题目大意:给定一个非降序的整数数组,要求计算对于一些询问(i,j),回答ai,ai+1,…,aj中出现最多的数出现的次数。
解题思路:因为序列为非降序的,所以相同的数字肯定是靠在一起的,所以用o(n)的方法处理处每段相同数字的区间。然后对于每次询问:
- num[i]=num[j]:j−i+1
- numi≠numj:max(RMQ(righti+1,reftj−1),max(righti−i+1,j−leftj+1))
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1e5+5;int N, Q, num[maxn], rmq[maxn][20];int left[maxn], right[maxn];void RMQ_init () { memset(rmq, 0, sizeof(rmq)); for (int i = 1; i <= N; i++) rmq[i][0] = right[i] - left[i] + 1; for (int j = 1; (1<<j) <= N; j++) { for (int i = 1; i + (1<<j) - 1 <= N; i++) rmq[i][j] = max(rmq[i][j-1], rmq[i+(1<<(j-1))][j-1]); }}void init () { for (int i = 1; i <= N; i++) scanf("%d", &num[i]); left[1] = 1; for (int i = 2; i <= N; i++) { if (num[i] == num[i-1]) left[i] = left[i-1]; else left[i] = i; } right[N] = N; for (int i = N-1; i >= 1; i--) { if (num[i] == num[i+1]) right[i] = right[i+1]; else right[i] = i; } RMQ_init();}int RMQ (int L, int R) { if (L > R) return 0; int k = 0; while (1<<(k+1) <= R-L+1) k++; return max(rmq[L][k], rmq[R-(1<<k)+1][k]);}int main () { while (scanf("%d%d", &N, &Q) == 2 && N) { init(); int x, y; for (int i = 0; i < Q; i++) { scanf("%d%d", &x, &y); if (num[x] == num[y]) printf("%d\n", y - x + 1); else printf("%d\n", max(RMQ(right[x]+1, left[y]-1), max(right[x] - x + 1, y - left[y] + 1))); } } return 0;}
1 0
- UVA 11235 Frequent Values ---RMQ
- UVa 11235 Frequent values(RMQ)
- UVA 11235 - Frequent values(RMQ)
- uva 11235 Frequent values RMQ
- uva 11235 - Frequent values(RMQ)
- UVA 11235 Frequent values RMQ
- 【RMQ】 UVA 11235 Frequent values
- UVA 11235 Frequent values (RMQ)
- UVA 11235 Frequent values (RMQ)
- [RMQ]UVa 11235 - Frequent values
- UVa 11235 Frequent values (RMQ)
- UVA 11235 Frequent values(RMQ)
- UVA 11235 Frequent values(RMQ)
- UVa - 11235 - Frequent values(RMQ)
- uva 11235 - Frequent values(RMQ问题)
- POJ 3368 Frequent values (UVA 11235)(RMQ)
- UVA 11235 Frequent values(RMQ)
- Uva 11235 Frequent values 【RMQ问题】
- HDU 4983 Goffi and GCD(数论)
- C--
- trigger_error()函数
- hdu3879 最大权闭合图
- JDBC深度封装的工具类 (具有高度可重用性)
- uva 11235 - Frequent values(RMQ)
- error_log()函数
- navigationBar tintColor barTintColor 分别在iOS7和它之前的区别
- Symmetric Tree
- 关于boost的shared_ptr以及weak_ptr的研究
- BestCoder Round #6(1002)hdu4982(贪心)
- hadoop之伪分布搭建
- 如何设置状态栏字体颜色
- UVA 10909 - Lucky Number(树状数组)