数据结构 RMQ算法   左右左右   写得有点晕了 。。。。。

/*************************************************************************
> Author: xlc2845 > Mail: xlc2845@gmail.com
> Created Time: 2013年11月07日 星期四 11时05分22秒
************************************************************************/ #include <cstdio>
//#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#define LL long long
#define maxn 100010
using namespace std; int val[maxn], cou[maxn], n, q, num[maxn], left[maxn], right[maxn], d[maxn][100];
void init()
{
memset(val, 0, sizeof(val));
memset(cou, 0, sizeof(cou));
memset(d, 0, sizeof(d));
}
void init_RMQ(int k)
{
for(int i = 0; i < k; i++)
d[i][0] = cou[i];
for(int j = 1; (1 << j) <= n; j++)
for(int i = 0; i+(1 << j) - 1 < n; i++)
d[i][j] = max(d[i][j-1], d[i+(1 << (j-1))][j-1]);
}
int RMQ(int L, int R)
{
if(L > R)
return 0;
int k = 0;
while((1 << (k+1)) <= R-L+1) k++;
return max(d[L][k], d[R-(1 << k)+1][k]);
}
int main()
{
while(scanf("%d", &n) == 1 && n)
{
init();
scanf("%d",&q);
int j = 1, x;
scanf("%d", &x);
left[j] = 1;
num[1] = j;
val[1] = x;
cou[1] = 1;
for(int i = 2; i <= n; i++)
{
scanf("%d", &x);
if(x == val[j])
{
num[i] = j;
cou[j]++;
}
else
{
right[j] = i-1;
j++;
val[j] = x;
num[i] = j;
cou[j] ++;
left[j] = i;
}
}
right[j] = n;
init_RMQ(j);
while(q--)
{
int rr,ll;
scanf("%d%d", &ll, &rr);
int R = num[rr], L = num[ll];
if(R == L) printf("%d\n", rr-ll+1);
else
{
int ans = right[L]-ll+1;
ans = max(rr-left[R]+1, ans);
ans = max(ans, RMQ(L+1, R-1));
printf("%d\n",ans);
}
}
}
return 0;
}

uva 11235的更多相关文章

  1. UVA 11235 (游程编码+ST算法)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23846 题目大意:给定一个升序序列,有q次询问,每次询问(L,R) ...

  2. UVA 11235 Frequent values 线段树/RMQ

    vjudge 上题目链接:UVA 11235 *******************************************************大白书上解释**************** ...

  3. RMQ算法 以及UVA 11235 Frequent Values(RMQ)

    RMQ算法 简单来说,RMQ算法是给定一组数据,求取区间[l,r]内的最大或最小值. 例如一组任意数据 5 6 8 1 3 11 45 78 59 66 4,求取区间(1,8)  内的最大值.数据量小 ...

  4. UVA 11235 频繁出现的数值 RMQ

    题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  5. UVA - 11235 Frequent values

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

  6. UVa 11235 RMQ

    首先讲一下RMQ算法的意思. RMQ(Range Minimum Query,RMQ)范围最小值,给出一个n个元素的数组,计算min(A[L],A[L+1],...,A[R-1],A[R]): 这里运 ...

  7. UVA 11235 Frequent Values ---RMQ

    大白书上的例题,具体讲解见大白书,最好用用一个Log数组直接求k,这样就是纯O(1)了 #include <iostream> #include <cstdio> #inclu ...

  8. UVa 11235 (RMQ) Frequent values

    范围最值问题,O(nlogn)的预处理,O(1)的查询. 这个题就是先对这些数列进行游程编码,重复的元素只记录下重复的次数. 对于所查询的[L, R]如果它完全覆盖了某些连续的重复片段,那么查询的就是 ...

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

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

随机推荐

  1. 理解C#系列 / 核心C# / 数据类型

    数据类型 数据类型 C#把数据类型分为两种:值类型和引用类型. 值类型和引用类型 值类型的变量直接指向存储的值,引用类型的变量指向值的引用.[理解:引用就像一个柜子的号码牌,可以顺藤摸瓜找到柜子.假如 ...

  2. How to Get Rid of /wordpress/ From your WordPress Site URL

    I brought up a website using wordpress, but I had to visit my website in a way I don't like -- www.e ...

  3. IE Problem : inetcpl.cpl

    从windows8升级windows8.1后每次关闭ie11浏览器总是跳出出现一个问题导致关闭,我都快疯了,以前windows8一点问题都没有.这是怎么回事?还有能回到ie10吗?(张浩228) 小昕 ...

  4. Codevs 1081 线段树练习2

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master   题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所有数都增加X 2:询问第 ...

  5. 数列平方根的和 java

    题目描述: 数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和. 输入 输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和 ...

  6. jquery的change 事件

    jquery的change 事件 . <script src="jquery.min.js" type="text/javascript">< ...

  7. Web应用登出后防止浏览器后退

    通常情况下,浏览器会对页面进行缓存,此时可以通过后退访问刚才的页面,如:Web应用登出后后退能够访问刚才被缓存的页面,这样在有些情况下是不够安全的,解决防止后退的办法如下: response.setH ...

  8. WIN10主动推升级,有点意思

    不论正与盗,皆推升级,是否一样可用?

  9. JavaScript 时间显示

    <span id="localtime"><span> <script type="text/javascript"> fu ...

  10. HTML5的页面资源预加载技术(Link prefetch)加速页面加载

    不管是浏览器的开发者还是普通web应用的开发者,他们都在做一个共同的努力:让Web浏览有更快的速度感觉.有很多已知的技术都可以让你的网站速度变得更快:使用CSS sprites,使用图片优化工具,使用 ...