poj 3368(RMQ应用)
来源:互联网 发布:驱动下载软件 编辑:程序博客网 时间:2024/05/17 02:23
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 integersa1 , ... , 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 qlines 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
#include<iostream>#include<cstdio>using namespace std;const int mm=111111;int f[mm][22],a[mm],b[mm],c[mm];int i,j,k,n,q;void dp(){ for(i=1;i<=n;++i)f[i][0]=a[i]; for(j=1;(1<<j)<=n;++j) for(i=1;i+(1<<j)-1<=n;++i) f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);}int get(int l,int r){ if(a[r]>=r-l+1)return r-l+1; int m=max(b[l]-a[l]+1,a[r]),k=0; l=l+b[l]-a[l]+1,r-=a[r]; if(l>r)return m; while(l+(1<<k)<r-(1<<k)+1)++k; return max(m,max(f[l][k],f[r-(1<<k)+1][k]));}int main(){ while(scanf("%d",&n),n) { scanf("%d",&q); for(i=1;i<=n;++i)scanf("%d",&c[i]),a[i]=1; for(i=2;i<=n;++i) if(c[i-1]==c[i])a[i]+=a[i-1]; for(b[n]=a[n],i=n-1;i>0;--i) if(c[i+1]==c[i])b[i]=b[i+1]; else b[i]=a[i]; dp(); while(q--)scanf("%d%d",&i,&j),printf("%d\n",get(i,j)); } return 0;}
- poj 3368(RMQ应用)
- poj 3368 RMQ 模版应用
- poj 3368(RMQ简单应用)
- POJ 3368 Frequent values RMQ应用
- poj 3264 RMQ 基本应用
- POJ 3368 RMQ - ST
- POJ 3368 (RMQ)
- POJ 3368 RMQ
- POJ 3368 RMQ-ST
- poj 3368 RMQ
- POJ 3368 RMQ
- POJ 3368 经典RMQ
- poj 3368(RMQ)
- poj 3368(RMQ问题)
- POJ 3368 (RMQ)
- POJ 3368 RMQ
- POJ 3368/RMQ
- poj 3368 Frequent values //RMQ
- 哈佛大学幸福课笔记一
- 数据库的登录和注册
- sql用存储过程获取当前计算机ip
- 最大子段和——分治与动态规划
- T-SQL with as 的用法(转)
- poj 3368(RMQ应用)
- android电池管理
- HYML5下一代web from
- 如何提高激活DSO数据的性能
- CDN总结之一
- HTML在线编辑器。。一看就会的
- rman总结
- JDBC的事务控制和批量处理
- 游标