Frequent values
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 19998   Accepted: 7180

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

Source

 
  • 题目中序列是非递增序列,这样有序的序列有利于我们减少搜查的数据量
  • 我们可以利用相同数都在一起的性质给序列分块
  • 然后对于一个询问,我们总是整块地查询
  • 就是说对于一个查询我们先得出最左边分块出现次数和最右边分块出现次数,然后中间剩余分块可以用ST表RMQ查询
 #include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
typedef long long LL ;
typedef unsigned long long ULL ;
const int maxn = 1e6 + ;
const int inf = 0x3f3f3f3f ;
const int npos = - ;
const int mod = 1e9 + ;
const int mxx = + ;
const double eps = 1e- ;
const double PI = acos(-1.0) ; int fac[], dp[maxn][];
int l[maxn], r[maxn];
void ST(int n){
int k=(int)(log((double)n)/log(2.0));
for(int i=;i<=n;i++)
dp[i][]=r[i]-l[i]+;
for(int j=;j<=k;j++)
for(int i=;i+fac[j]-<=n;i++)
dp[i][j]=max(dp[i][j-],dp[i+fac[j-]][j-]);
}
int RMQ(int u, int v){
int k=(int)(log((double)(v-u+))/log(2.0));
return max(dp[u][k],dp[v-fac[k]+][k]);
}
int n, m, u, v, ans, tot, a[maxn], b[maxn];
int main(){
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
for(int i=;i<;i++)
fac[i]=(<<i);
while(~scanf("%d",&n)){
if(==n){break;}
scanf("%d",&m);
a[]=1e6+;
tot=;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
if(a[i-]!=a[i]){
tot++;
b[i]=tot;
l[tot]=i;
r[tot]=i;
}else{
b[i]=tot;
r[tot]++;
}
// b[i]=tot;
}
ST(tot);
while(m--){
scanf("%d %d",&u,&v);
if(b[u]==b[v]){
ans=v-u+;
}else if(b[u]+==b[v]){
ans=max(r[b[u]]-u+,v-l[b[v]]+);
}else{
ans=max(r[b[u]]-u+,v-l[b[v]]+);
ans=max(ans,RMQ(b[u]+,b[v]-));
}
printf("%d\n",ans);
}
}
return ;
}

POJ_3368_Frequent values的更多相关文章

  1. 全部省市县数据库(MySQL脚本) (转)

    /*MySQL - 5.5.47 *************//*!40101 SET NAMES utf8 */; create table `base_area` (    `codeid` me ...

  2. JS+MySQL获取 京东 省市区 地区

    采集了一下JD的省市区地区 (非常简单,只是做个记录) 1.建表:account_area   2.进入页面: https://reg.jd.com/reg/company 在浏览器(Firefox) ...

  3. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)

    本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...

  4. Django models .all .values .values_list 几种数据查询结果的对比

    Django models .all .values .values_list 几种数据查询结果的对比

  5. UVA - 11235 Frequent values

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

  6. codeforces 360 E - The Values You Can Make

    E - The Values You Can Make Description Pari wants to buy an expensive chocolate from Arya. She has  ...

  7. Default Parameter Values in Python

    Python’s handling of default parameter values is one of a few things that tends to trip up most new ...

  8. iOS开发之SQLite--C语言接口规范(四) —— Result Values From A Query

    数据库的在上一篇博客中<SQLite之C语言接口规范(三)——Binding Values To Prepared Statements>用到了如何从查询结果中取出结果值.今天的博客就详细 ...

  9. mybatis报错invalid types () or values ()解决方法

      原因: Pojo类User没提供无参数构造方法, 加上该构造方法后,问题解决 ### Cause: org.apache.ibatis.reflection.ReflectionException ...

随机推荐

  1. logstash结合rsyslog,收集系统日志

    rsyslog是日志收集工具.如今非常多Linux都自带rsyslog,用其替换掉syslog.怎样安装rsyslog就不讲了.大概讲下原理.然后讲logstash的相关配置. rsyslog本身有一 ...

  2. Go之并发处理(售票问题)

    老问题:模拟一个售票窗口进行售票 先定义类型Ticket(车票)和Conductor(销售员)--偷懒了,把售票和产票都交给Conductor了 package util import () //-- ...

  3. 使用srvany.exe将程序安装成windows服务的详细教程

    srvany.exe介绍 srvany.exe是Microsoft Windows Resource Kits工具集的一个实用的小工具,用于将任何EXE程序作为Windows服务运行.也就是说srva ...

  4. ZTree async中文乱码,ZTree reAsyncChildNodes中文乱码,zTree中文乱码

    ZTree async中文乱码,ZTree reAsyncChildNodes中文乱码,zTree中文乱码 >>>>>>>>>>>&g ...

  5. 管理工具 django-admin.py的相关命令列表

    C:\Users\lenovo> django-admin.py Type 'django-admin.py help <subcommand>' for help on a spe ...

  6. [Command] alias - 别名

    alias 命令可以让用户使用预置的字符串来执行系统命令. 命令是指用户输入指令指示电脑完成工作.命令一般在命令行输入,以回车键完成输入.命令被传递给shell.shell是类Unix操作系统提供的纯 ...

  7. cannot access android.support.v4.app.BaseFragmentActivityJB的解决

    //implementation 'com.android.support:appcompat-v7:26.1.0' 改成implementation 'com.android.support:app ...

  8. C++中class与struct的区别(struct的类型名同时可以作为变量名)

    通常我们知道的区别: (一)默认继承权限.如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理: (二)成员的默认访问权限.class的成员默 ...

  9. WP8.1学习系列(第二十三章)——到控件的数据绑定

    在本文中 先决条件 将控件绑定到单个项目 将控件绑定到对象的集合 通过使用数据模板显示控件中的项目 添加详细信息视图 转换数据以在控件中显示 相关主题 本主题介绍了如何在使用 C++.C# 或 Vis ...

  10. 原生js--鼠标事件

    鼠标事件对象几个重要的属性: clientX 窗口坐标,加上垂直滚动可以得到文档纵坐标 clientY 窗口坐标,加上水平滚动可以得到文档横坐标 altKey boolean值,点击时是否按下了alt ...