UVA11235 Frequent values
思路
连续的值只会分布在一起成一个块
讨论两边的块,中间就是RMQ了
ST表即可
代码
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int times[100100],belong[100100],lb[100100],rb[100100],inq,n,q,st[100100][21];
void init_ST(void){
for(int i=1;i<=inq;i++)
st[i][0]=times[i];
for(int i=1;i<21;i++)
for(int j=1;j<=n;j++)
st[j][i]=max(st[j][i-1],st[min(j+(1<<(i-1)),n+10)][i-1]);
}
int query(int l,int r){
if(l>r)
return 0;
int k=0;
while((1<<(k+1))<=(r-l+1)){
k++;
}
return max(st[l][k],st[r-(1<<k)+1][k]);
}
int main(){
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
scanf("%d",&n);
while(n){
scanf("%d",&q);
memset(times,0,sizeof(times));
memset(belong,0,sizeof(belong));
memset(st,0,sizeof(st));
inq=0;
int last=0x3f3f3f3f;
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
if(x!=last){
last=x;
++inq;
times[inq]=1;
lb[inq]=i;
}
else
times[inq]++;
belong[i]=inq;
rb[inq]=i;
}
init_ST();
for(int i=1;i<=q;i++){
int l,r,lx,rx;
scanf("%d %d",&l,&r);
lx=belong[l];
rx=belong[r];
int lt=min(rb[lx],r)-max(lb[lx],l)+1,rt=min(rb[rx],r)-max(lb[rx],l)+1;
printf("%d\n",max(max(query(lx+1,rx-1),lt),rt));
}
scanf("%d",&n);
}
return 0;
}
UVA11235 Frequent values的更多相关文章
- 【暑假】[实用数据结构]UVa11235 Frequent values
UVa 11235 Frequent values Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11241 Accep ...
- poj3368 uva11235 Frequent values
Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In ad ...
- UVA-11235 Frequent values (RMQ)
题目大意:在一个长度为n的不降序列中,有m次询问,每次询问(i,j)表示在区间(i,j)中找出出现次数最多的元素的出现次数. 题目分析:因为序列有序,可以将序列分段,并且记录每段的元素个数.每一个元素 ...
- UVA - 11235 Frequent values
2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...
- poj 3368 Frequent values(RMQ)
/************************************************************ 题目: Frequent values(poj 3368) 链接: http ...
- H - Frequent values
Problem F: Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasi ...
- Frequent values && Ping pong
Frequent values 题意是不同颜色区间首尾相接,询问一个区间内同色区间的最长长度. 网上流行的做法,包括翻出来之前POJ的代码也是RMQ做法,对于序列上的每个数,记录该数向左和向右延续的最 ...
- [HDU 1806] Frequent values
Frequent values Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 数据结构(RMQ):UVAoj 11235 Frequent values
Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. I ...
随机推荐
- mybatis05--多条件的查询
public interface StudentDao { /** * 前台的表单给出的查询条件不能封装成一个对象的时候 * 查询只能是多个参数了! 也就是参数不全是Student中的属性! * 这时 ...
- CF3A Shortest path of the king
The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose heart, becaus ...
- Finalize方法的生成
Finalize在c#编程语言中需要特殊语法,因此,c#要求在类名前加~符号来定义Finalize方法:例如 internal class FinalizeDemo { ~FinalizeDemo() ...
- java8新特性--Stream的基本介绍和使用
什么是Stream? Stream是一个来自数据源的元素队列并可以进行聚合操作. 数据源:流的来源. 可以是集合,数组,I/O channel, 产生器generator 等 聚合操作:类似SQL语句 ...
- angular--获取时间方法services
写了一些公用方法获取自然周.传入开始和结束日期,获取中间全部日期等方法 .service('DateServices', [function () { // 获取某年自然周的方法 (如果是当年,只返回 ...
- php 命令行参数
getopt (PHP 4 >= 4.3.0, PHP 5, PHP 7) getopt — 从命令行参数列表中获取选项 说明 array getopt ( string $options [, ...
- webpack项目搭建
1.新建一个文件目录,命令行进入当前目录,输入npm init 创建package.json文件 2.安装项目依赖webpack模块: npm install webpack --save-dev 3 ...
- (Detected problems with API compatibility(visit g.co/dev/appcompat for more info)
在applicaiton里面加载这么一段代码: private void closeAndroidPDialog(){ try { Class aClass = Class.forName(" ...
- airsim 无法打开包括文件corecrt.h
原因: 显示无法打开包括文件corecrt.h.在网上找了很多方法,最后综合起来发现,这个问题网上很多人反映,应该是vs2015的一个BUG,如果是选择"从父级或项目默认设置继承" ...
- input type = file 上传图片转为base64
项目背景是做图片识别,接口需要上传图片格式为base64格式的,react项目的相关代码: let reader = new FileReader();reader.readAsDataURL(e.t ...