POJ 3368
来源:互联网 发布:美工助手阿里巴巴版 编辑:程序博客网 时间:2024/06/05 06:53
Description
You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In addition to that, you are given several queries consisting of indices i and j (1 ≤ i ≤ j ≤ n). For each query, determine the most frequent value among the integers ai , ... , aj.
Input
The input consists of several test cases. Each test case starts with a line containing two integers n and q (1 ≤ n, q ≤ 100000). The next line contains n integers a1 , ... , an (-100000 ≤ ai ≤ 100000, for each i ∈ {1, ..., n}) separated by spaces. You can assume that for each i ∈ {1, ..., n-1}: ai ≤ ai+1. The following q lines contain one query each, consisting of two integers i and j (1 ≤ i ≤ j ≤ n), which indicate the boundary indices for the
query.
The last test case is followed by a line containing a single 0.
Output
For each query, print one line with one integer: The number of occurrences of the most frequent value within the given range.
Sample Input
10 3-1 -1 1 1 1 1 3 10 10 102 31 105 100
Sample Output
143
Source
一.题意分析
裸的ST表题目
二.思路过程
写一个构建ST表的函数和一个查询函数
三.代码
#include <iostream>#include <cstdio>#include <cmath>using namespace std;int num[100010], f[100010], MAX[100010][20];int n;void ST(){ int i, j, k; for(i=1;i<=n;i++) MAX[i][0]=f[i]; k=log((double)(n+1))/log(2.0); for(j=1;j<=k;j++) for(i=1;i+(1<<j)-1<=n;i++) MAX[i][j]=max(MAX[i][j-1],MAX[i+(1<<(j-1))][j-1]);}int Query(int l,int r){ if(l>r) return 0; int k=log((double)(r-l+1))/log(2.0); return max(MAX[l][k],MAX[r-(1<<k)+1][k]);}int main(){ int q,i,a,b; while(scanf("%d",&n)&&n) { scanf("%d",&q); for(i=1;i<=n;i++) { scanf("%d",&num[i]); if(i==1) { f[i]=1; continue; } if(num[i]==num[i-1]) f[i]=f[i-1]+1; else f[i]=1; } ST(); for(i=1;i<=q;i++) { scanf("%d%d",&a,&b); int t=a; while(t<=b&&num[t]==num[t-1]) t++; int cnt=Query(t,b); int ans=max(t-a,cnt); printf("%d\n",ans); } } return 0;}/*10 3-1 -1 1 1 1 1 3 10 10 102 31 105 100*/
- poj 3368
- poj 3368
- poj 3368
- POJ-3368
- POJ 3368
- poj 3368
- poj 3368
- POJ 3368
- poj 3368
- POJ 3368
- poj 3368
- poj 3368
- POJ 3368 Frequent values
- poj 3368 Frequent values
- POJ 3368 Frequent Values
- poj 3368 Frequent values
- POJ 3368 RMQ - ST
- poj 3368(RMQ应用)
- ERACH 2ms 8960注册失败的问题分析
- JavaScript基础(第一部分)
- WEB前端-JS-动态购物页面V1
- JavaScript趣题:统计二进制
- px4位置估计-inav 算法解读
- POJ 3368
- Xss攻击事件详解
- c语言获取数组长度
- SpringMVC源码剖析(六)- HandlerInterceptor的来龙去脉
- 盲人摸象
- HTML5-交易頁面
- POJ 1511 Invitation Cards
- CornerStone使用教程(配置SVN,HTTP及svn简单使用)
- HTTP协议中PUT和POST使用上的区别