Frequent values(poj 3368)
题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数。
代码:
/*
rmq算法
当询问到x,y时,设在x之后并且与a[x]相同的最后一个数编号为t,那么x到t之间的数一定相同,t-x+1可能是答案;t+1到y之间的最大连续个数也可能是答案。那么我们设两个数组,hou[i]表示i之后并且与a[i]相同的最后一个数编号,num[i]表示到i为止a[i]连续出现的次数。当询问时,我们只需对两种答案取最大值即可。
*/
#include<cstdio>
#include<iostream>
#include<cmath>
#define M 100010
using namespace std;
int a[M],num[M],hou[M],s[M][],n,m;
int main()
{
while(scanf("%d%d",&n,&m)==)
{
if(!n)break;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]==a[i-])num[i]=num[i-]+;
else num[i]=;
s[i][]=num[i];
}
hou[n]=n;
for(int i=n-;i>=;i--)
if(a[i]==a[i+])hou[i]=hou[i+];
else hou[i]=i;
for(int j=;j<=;j++)
for(int i=;i<=n;i++)
{
s[i][j]=s[i][j-];
if(i+(<<(j-))<=n)
s[i][j]=max(s[i][j],s[i+(<<(j-))][j-]);
}
for(int i=;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
int t=hou[a];
if(t>=b)printf("%d\n",b-a+);
else
{
int ans1=t-a+;
a=t+;
int k=log(b-a+)/log();
int ans2=max(s[a][k],s[b-(<<k)+][k]);
printf("%d\n",max(ans1,ans2));
}
}
}
return ;
}
Frequent values(poj 3368)的更多相关文章
- poj 3368 Frequent values(段树)
Frequent values Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13516 Accepted: 4971 ...
- poj3368 Frequent values(线段树)
Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In ad ...
- poj 1806 Frequent values(RMQ 统计次数) 详细讲解
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1806 题目大意:给你一个非降序排列的整数数组,你的任务是对于一系列的询问,(i,j),回答序列中出现次 ...
- UVA 11235 Frequent values(RMQ)
Frequent values TimeLimit:3000Ms , ... , an in non-decreasing order. In addition to that, you are gi ...
- 01背包问题:Charm Bracelet (POJ 3624)(外加一个常数的优化)
Charm Bracelet POJ 3624 就是一道典型的01背包问题: #include<iostream> #include<stdio.h> #include& ...
- Scout YYF I(POJ 3744)
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5565 Accepted: 1553 Descr ...
- 广大暑假训练1(poj 2488) A Knight's Journey 解题报告
题目链接:http://vjudge.net/contest/view.action?cid=51369#problem/A (A - Children of the Candy Corn) ht ...
- Games:取石子游戏(POJ 1067)
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 37662 Accepted: 12594 Descripti ...
- BFS 或 同余模定理(poj 1426)
题目:Find The Multiple 题意:求给出的数的倍数,该倍数是只由 1与 0构成的10进制数. 思路:nonzero multiple 非零倍数 啊. 英语弱到爆炸,理解不了题意... ...
随机推荐
- python 字符串的split()函数详解(转)
作者:宋桓公 出处:http://www.cnblogs.com/douzi2/ 如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同 ...
- Hibernate配置(外部配置文件方式)
配置Hibernate有2种方式,本文讲的是通过外部配置文件配置的方式 Hibernate核心配置文件 <?xml version='1.0' encoding='UTF-8'?> < ...
- WPF学习09:数据绑定之 Binding to List Data
从WPF学习03:Element Binding我们可以实现控件属性与控件属性的绑定. 从WPF学习07:MVVM 预备知识之数据绑定 我们可以实现控件属性与自定义对象属性的绑定. 而以上两个功能在实 ...
- vue HTTP请求(针对vue-resource)
//初始化页面需要做什么事情 //点击后需要做什么事情 //鼠标.键盘.冒泡.默认行为等事件 //前端调用接口就是按需展示数据//created和mounted里面都可以做数据处理,唯一不同的是cre ...
- angular2快速开始
简介 5 分钟从0搭建一个ng2项目demohttps://angular.io/docs/js/latest/quickstart.html 你运气真好,竟然看到了这篇文章,你省事了,一分钟让你完成 ...
- MATLAB 中的randn函数
matlab函数 randn:产生正态分布的随机数或矩阵的函数 randn:产生均值为0,方差σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数. 用法: Y = randn(n):返回一 ...
- PC端浏览器定位
第一: PC端浏览器定位(纯前端)浏览器定位 :这里用了两种 ,一种是Html5自带的方法 另一种是引用了百度api ,百度api 的使用有三种:1 浏览器定位2 ip定位3 SDK辅助定位引用百度 ...
- 手机信号强度单位:dBm 和 asu
介绍 首先明确:dBm 和 asu 是两个独立的单位,它们的换算关系不唯一. 在 2G 网络下:dBm = -113+2*asu在 4G 网络下:dBm = -140+asu dBm 和 asu 都用 ...
- 使用GetLogicalDrives获取卷标
#include<stdio.h> #include<windows.h> int main() { DWORD dwLogical= GetLogicalDrives(); ...
- eclipse如何设置多个字符的智能提示
clipse代码里面的代码提示功能默认是关闭的,只有输入“.”的时候才会提示功能,用vs的用户可能不太习惯这种,vs是输入任何字母都会提示,下面说一下如何修改eclipse配置,开启代码自动提示功能打 ...