Frequent values

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1146    Accepted Submission(s): 415

Problem 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 10
2 3
1 10
5 10
0
 
Sample Output
1
4
3
 
Hint

A naive algorithm may not run in time!

 
分成三段、中间RMQ、然后求最大值即可
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
#define N 100010 int n,m;
int a[N];
int dp[N][];
int id[N];
int len[N],l[N],r[N]; void init()
{
int i,j;
for(i=;i<=n;i++)
{
dp[i][]=len[i];
}
int k=(int)(log((double)n)/log(2.0));
for(j=;j<=k;j++)
{
for(i=;i+(<<j)-<=n;i++)
{
dp[i][j]=max(dp[i][j-],dp[i+(<<(j-))][j-]);
}
}
}
int query(int i,int j)
{
int k=(int)(log((double)(j-i+))/log(2.0));
int res=max(dp[i][k],dp[j-(<<k)+][k]);
return res;
}
int main()
{
int i,pos;
while(scanf("%d",&n),n)
{
pos=;
scanf("%d",&m);
for(i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]!=a[i-])
{
pos++;
l[pos]=i;
}
id[i]=pos;
r[pos]=i;
len[pos]=r[pos]-l[pos]+;
}
n=pos;
init();
int x,y,xx,yy,ans1,ans2,ans3;
while(m--)
{
int x,y;
scanf("%d%d",&x,&y);
xx=id[x];
yy=id[y];
if(xx==yy) ans1=ans2=y-x+; //特殊情况、当x和y在同一个区间、答案是y-x+1
else
{
ans1=r[xx]-x+;
ans2=y-l[yy]+;
}
ans3=;
if(xx+<=yy-)ans3=query(xx+,yy-);
printf("%d\n",max(max(ans1,ans2),ans3));
}
}
return ;
}

[HDU 1806] Frequent values的更多相关文章

  1. hdu 1806 Frequent values 线段树

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

  2. poj 1806 Frequent values(RMQ 统计次数) 详细讲解

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1806 题目大意:给你一个非降序排列的整数数组,你的任务是对于一系列的询问,(i,j),回答序列中出现次 ...

  3. UVA - 11235 Frequent values

    2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...

  4. poj 3368 Frequent values(RMQ)

    /************************************************************ 题目: Frequent values(poj 3368) 链接: http ...

  5. H - Frequent values

    Problem F: Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasi ...

  6. Frequent values && Ping pong

    Frequent values 题意是不同颜色区间首尾相接,询问一个区间内同色区间的最长长度. 网上流行的做法,包括翻出来之前POJ的代码也是RMQ做法,对于序列上的每个数,记录该数向左和向右延续的最 ...

  7. 【暑假】[实用数据结构]UVa11235 Frequent values

    UVa 11235 Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11241   Accep ...

  8. 数据结构(RMQ):UVAoj 11235 Frequent values

    Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. I ...

  9. [POJ] 3368 / [UVA] 11235 - Frequent values [ST算法]

    2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...

随机推荐

  1. C语言中的%0nd,%nd,%-nd

    C语言中的%0nd printf --> formatted print/格式化输出 一.十进制 d -> decimal/十(shí)进制 int a=1; int b=1234; do ...

  2. Linux中的安装神器--yum源安装

    linux配置yum源 一.修改yum的配置文件     /etc/yum.repos.d/xxx.repo          1.进入yum配置文件目录        # cd /etc/yum.r ...

  3. npm:Node.js的软件包管理器

    npm https://www.npmjs.com/ 2016-08-03

  4. ASP.NET 实现简单的图片防盗链介绍

    在此,网站图片防盗链的方法是,通过获取Http请求头中的 Referer 标头与本网站域名比较,来判断用户是否来自本站跳转过来的 . 创建一个全局处理程序,用来处理images目录下的图片的直接请求: ...

  5. iis7以上版本权限控制

    IIS7.5中(仅win7,win2008 SP2,win2008 R2支持),应用程序池的运行帐号,除了指定为LocalService,LocalSystem,NetWorkService这三种基本 ...

  6. 关于SQL优化的一个小试例子

    原SQL: select ta.serialno,       ta.accepttime,       ta.subsnumber,       ta.subsname,       ta.cont ...

  7. Java基础中的一些注意点

    1.在Java编程语言中,标识符是赋予变量.类或方法的名称.标识符可从一个字母.下划线(_)或美元符号($)开始,随后也可跟数字.标识符是大小写区别对待的并且未规定最大长度. 2.Java技术源程序采 ...

  8. JQuery插件,傻傻分不清!

    不多说,直接上代码! 第一种 extend <!-- extend 扩展jQuery,其实就是增加一个静态方法 -->         $.extend({            sayH ...

  9. Git权威指南 读笔(3)

    第九章 恢复进度: $ git stash list 显示存储的工作进度列表. $ git stash 保存当前的工作进度,分别对暂存区和工作区的状态进行保存. $ git stash pop [-- ...

  10. 使用jackson对Java对象与JSON字符串相互转换的一些总结

    本文为菠萝大象原创,如要转载请注明出处.http://www.blogjava.net/bolo 代码无真相,为了最简单的说明,我直接上代码. public class User { private  ...