UVA 11235 Frequent Values ---RMQ
大白书上的例题,具体讲解见大白书,最好用用一个Log数组直接求k,这样就是纯O(1)了
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- #define N 100003
- int a[N],num[N],le[N],ri[N],cnt[N];
- int d[N][],n,type;
- void RMQ_init()
- {
- int i,j;
- for(i=;i<=type;i++)
- d[i][] = cnt[i];
- for(j=;(<<j)<=type;j++)
- {
- for(i=;i+(<<j)-<=type;i++)
- d[i][j] = max(d[i][j-],d[i+(<<(j-))][j-]);
- }
- }
- int LOG[];
- void getLog(int n)
- {
- for(int i=;i<=n;i++)
- LOG[i] = (int)(log((double)i)/log(2.0));
- }
- int RMQ(int l,int r)
- {
- int k = LOG[R-L+];
- return max(d[l][k],d[r-(<<k)+][k]);
- }
- int main()
- {
- int q,i,j,pos;
- int l,r;
- while(scanf("%d",&n)!=EOF && n)
- {
- scanf("%d",&q);
- for(i=;i<=n;i++)
- scanf("%d",&a[i]);
- a[] = -;
- type = ;
- for(pos=;pos<=n;pos++)
- {
- if(a[pos] != a[pos-])
- {
- if(pos != )
- cnt[type] = pos-le[pos-];
- num[pos] = ++type;
- for(j=le[pos-];j<=pos-;j++)
- ri[j] = pos-;
- le[pos] = pos;
- if(pos == n)
- cnt[type] = ,ri[pos] = pos;
- }
- else
- {
- le[pos] = le[pos-];
- num[pos] = num[pos-];
- if(pos == n)
- {
- cnt[type] = pos - le[pos] + ;
- for(j=le[pos];j<=n;j++)
- ri[j] = n;
- }
- }
- }
- RMQ_init();
- while(q--)
- {
- scanf("%d%d",&l,&r);
- if(num[l] == num[r])
- {
- printf("%d\n",r-l+);
- continue;
- }
- int lmax = ri[l]-l+;
- int rmax = r-le[r]+;
- int mmax;
- if(num[l]+ > num[r]-)
- mmax = ;
- else
- mmax = RMQ(num[l]+,num[r]-);
- printf("%d\n",max(mmax,max(lmax,rmax)));
- }
- }
- return ;
- }
UVA 11235 Frequent Values ---RMQ的更多相关文章
- RMQ算法 以及UVA 11235 Frequent Values(RMQ)
RMQ算法 简单来说,RMQ算法是给定一组数据,求取区间[l,r]内的最大或最小值. 例如一组任意数据 5 6 8 1 3 11 45 78 59 66 4,求取区间(1,8) 内的最大值.数据量小 ...
- UVa 11235 Frequent values (RMQ && 区间出现最多次的数的次数)
题意 : 给出一个长度为 n 的不降序序列,并且给出 q 个形如(L, R)的问询,问你这个区间出现的最多次的数的次数. 分析 : 很自然的想到将区间“缩小”,例如1 1 2 3 3 3就可以变成2 ...
- UVA 11235 Frequent values(RMQ)
Frequent values TimeLimit:3000Ms , ... , an in non-decreasing order. In addition to that, you are gi ...
- UVA 11235 Frequent values 线段树/RMQ
vjudge 上题目链接:UVA 11235 *******************************************************大白书上解释**************** ...
- UVA - 11235 Frequent values
2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...
- [POJ] 3368 / [UVA] 11235 - Frequent values [ST算法]
2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...
- POJ 3368 & UVA 11235 - Frequent values
题目链接:http://poj.org/problem?id=3368 RMQ应用题. 解题思路参考:http://blog.csdn.net/libin56842/article/details/4 ...
- 数据结构(RMQ):UVAoj 11235 Frequent values
Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. I ...
- poj 3368 Frequent values(RMQ)
/************************************************************ 题目: Frequent values(poj 3368) 链接: http ...
随机推荐
- C语言范例学习03-上
第三章 数据结构 章首:不好意思,这两天要帮家里做一些活儿.而且内容量与操作量也确实大幅提升了.所以写得很慢. 不过,从今天开始.我写的东西,许多都是之前没怎么学的了.所以速度会慢下来,同时写得也会详 ...
- ASP.NET WebAPI 11 参数验证
在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性. ModelState 在ApiController中一个ModelState属性用来获取参 ...
- springmvc+mybatis+spring 整合
获取[下载地址] [免费支持更新]三大数据库 mysql oracle sqlsever 更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] ...
- winform(进程和线程)
一.进程:需要有用Process类用法一:Process.Start("calc");(不好用)该方法弊端:有许多程序不知道它的运行名字到底是什么,如果写错了,就会出现程序崩溃错误 ...
- 请用fontAwesome代替网页icon小图标
1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...
- IOS6学习笔记(四)
1.GCD设置一个timer计时器 - (void)awakeFromNib { __weak id weakSelf = self; double delayInSeconds = 0.25; _t ...
- Atitit.HTTP 代理原理及实现 正向代理与反向代理attilax总结
Atitit.HTTP 代理原理及实现 正向代理与反向代理attilax总结 1. 普通代理1 1.1.1. 普通代理2 2. 隧道代理3 3. 反向代理 4 4. 正向代理也可以使用apache实现 ...
- maven eclipse 插件下载地址
要用的时候,搜索了半天,自己记录下 单独下载地址 http://maven.apache.org/download.cgi eclipse 更新地址 http://download.eclipse.o ...
- Android——检查网络是否已经链接
新建一个项目testNet 添加一个button layout.xml: <RelativeLayout xmlns:android="http://schemas.android.c ...
- 我对XCode Objective-c Cocoa的简单理解
我对XCode Objective-c Cocoa的简单理解 Xcode Xcode说的通俗一点就是开发OS X 和 iOS 应用程序的. 如果我们想要认真点说 ,Xcode 是运行在操作系统Mac ...