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 nintegers 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 10
2 3
1 10
5 10
0

Sample Output

1
4
3
// RMQ在线查询#include <cstdio>
#include <algorithm>
#include <cmath>#define MAX 100010using namespace std;int maxsum[MAX][20];
int f[MAX];
int a[MAX];
int n, q;void RMQ( int n ) { //预处理->O(nlogn)for( int i = 1; i <= n; i++ ) {maxsum[i][0] = f[i];}for( int j = 1; j < 20; ++j )for( int i = 1; i <= n; ++i )if( i + (1 << j) - 1 <= n ) {maxsum[i][j] = max( maxsum[i][j - 1], maxsum[i + (1 << (j - 1))][j - 1] );}
}int query( int left, int right ) {if( left > right ) return 0;int k = (int)(log( right - left + 1.0 ) / log( 2.0 ));int maxres = max( maxsum[left][k], maxsum[right - ( 1 << k ) + 1][k] );return maxres;
}int main() {while( scanf( "%d", &n ) ) {memset( a, 0, sizeof( a ) );memset( f, 0, sizeof( f ) );memset( maxsum, 0, sizeof( maxsum ) );if( n == 0 ) break;scanf( "%d", &q );for( int i = 1; i <= n; i++ ) {scanf( "%d", &a[i] );if( i == 1 ) f[1] = 1;else if( a[i] == a[i - 1] ) f[i] = f[i - 1] + 1;else f[i] = 1;}RMQ( n );while( q-- ) {int left, right;scanf( "%d%d", &left, &right );// 先寻找前半段满足连续相等值的位置,因为前半段可能会产生影响int t = left;while( t <= right && a[t] == a[t - 1] ) t++;int ans = query( t, right );    // 计算后半段ans = max( ans, t - left );     // 选两者最大值printf( "%d\n", ans );}}return 0;
}

POJ-3368 Frequent values相关推荐

  1. POJ 3368 Frequent values 【ST表RMQ 维护区间频率最大值】

    传送门:http://poj.org/problem?id=3368 Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total S ...

  2. POJ 3368 Frequent values (RMQ)

    题目链接:http://poj.org/problem?id=3368 题目大意: 给出一个n个数长度的串. m个询问 求出给定范围内的最大连续字符串的长度 方法: RMQ模板, 记录每一个位置的数连 ...

  3. POJ 3368 Frequent values 线段树区间合并

    题意O(-1)不用解释.. 线段树结点维护三个信息:区间内相同的数出现最多的次数maxc.区间左边第一个数出现的次数lc.区间右边第一个数出现的次数rc. 分左区间右端点和右区间左端点相同于否的情况合 ...

  4. poj 3368 Frequent values rmq

    题意:给你一串数列,然后给你一个起终位置对,问你这个段序列里出现最多的出现了几次. 思路:一段序列里,无非就是三种情况,1,一组相同的数,2两组相同,3,3组或者更多组数,这样我们队每一组数的开头结束 ...

  5. 【线段树】FREQUENT - Frequent values(luogu-SP1684 / poj 3368)

    FREQUENT - Frequent values luogu-SP1684 poj 3368 题目大意: 有一个单调不降序列,让你求出某些区间内的出现次数最多的数出现的次数(有多组数据,以0结尾) ...

  6. UVA 11235 Frequent values(RMQ)

    Frequent values TimeLimit:3000Ms You are given a sequence of n integers a1 , a2 , ... , an in non-de ...

  7. Frequent values【线段树】

    Frequent values UVA - 11235 题目传送门 题目大意:给出一个非降序的整数数组a1,a2,a3...an,你的任务是对一系列的询问(i,j),回答ai,ai+1,ai+2... ...

  8. POJ 2785 4 Values whose Sum is 0

    传送门:http://poj.org/problem?id=2785 解题思路: 从这四个数列中选择的话总有n的4次方中情况,所以全部判断一遍不可行.不过将他们对半分成AB和CD再考虑的话就可以解决了 ...

  9. hdu 1806 Frequent values 线段树

    题目链接 给一个非递减数列, n个数, m个询问, 每个询问给出区间[L, R], 求这个区间里面出现次数最多的数的次数. 非递减数列, 这是最关键的一个条件... 需要保存一个区间最左边的数, 最右 ...

  10. 【图灵杯 E也即POJ 3368】简单的RMQ

    Description 给定一个数组,其中的元素满足非递减顺序.任意给定一个区间[i,j],求其中某个元素重复出现的最大次数. Input 多组数据输入.每组数据的第一行包含两个整数n和q(1< ...

最新文章

  1. hibernate fetch使用
  2. 金鑫是著名高校计算机,金鑫 个人简历
  3. python求回文_python实现求最长回文子串长度
  4. 乐鑫ESP32完美对标AP6212,国产芯片不缺货,不涨价!牛
  5. 统计list里面相同元素个数_LeetCode 第 347 号问题:前 K 个高频元素
  6. OpenGL基础46:切线空间
  7. 运用cnn实现手写体(mnist)数字识别_实现 MNIST 手写数字识别
  8. cad插入块_「AutoCAD之属性块」别怕难,从零做起,制作属性块只需6步走
  9. 强迫症才需要看,新装电脑 Win10 硬盘整数分区
  10. ERP之主生产计划MPS
  11. 2019携程校园招聘编程题(2)取满足条件订单号
  12. [附源码]java毕业设计网上书店系统
  13. 怎么查看电脑内存的型号
  14. 数据技术嘉年华专列10月28日抵达广州,请做好接站准备
  15. linux查看磁盘是否SSD盘
  16. 求职中的平常心——Leo网上答疑48
  17. 怎么用英语推销小型计算机,关于推销电脑英语对话
  18. 计算1+3+5+...+99的和
  19. 筛查肌肉病变,首选磁共振
  20. (三)地理信息中对地球的描述-参心坐标系、地心坐标系

热门文章

  1. 巨杉数据库兼容mysql_SequoiaDB 巨杉数据库
  2. 浏览器内部工作原理[译]How browsers work (转)
  3. uniapp , 微信小程序 图片加载时闪烁
  4. php 三色排序,三色旗排序问题 | 学步园
  5. dfuse 为你提供定制网络服务
  6. 帝国cms弱口令登录(帝国cms后台密码忘记怎么办?)
  7. matlab 平行四边形,matlab计算四边形面积
  8. 京东11万蓝领和1万白领,折射的是整个中国互联网
  9. LeetCode,无它,唯手熟尔(二)
  10. 字节跳动后端开发实习生面试经验