数据结构 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. linux下开发板网络速度测试记录

        由于做的项目对于网络和USB的读写速度有很高的要求,因此新拿回来的板子要测试网络和usb的最佳传输速度.要考虑不少因素,先把我能想到的记录下来.     测试的环境是开发板和ubuntu虚拟机 ...

  2. JS学习第四课

    当我们删除某列表格,再添加新的一列时,它的序号该如何控制呢.这里id=oTab.tBodies[0].rows.length+1        otd.innerHTML=id++;   很关键哦. ...

  3. C++四种不同的对象生存方式

    在C++中,有四种方法产生一个对象. 第一种方法是在堆栈(stack)之中产生: void MyFunc() { CFoo foo;//在堆栈(stack)中产生foo对象 } 第二种方法是在堆(he ...

  4. java synchronized关键字浅探

    synchronized 是 java 多线程编程中用于使线程之间的操作串行化的关键字.这种措施类似于数据库中使用排他锁实现并发控制,但是有所不同的是,数据库中是对数据对象加锁,而 java 则是对将 ...

  5. CentOS 7.2 无法生成 coredump文件

    CentOS版本 cat /etc/centos-release  CentOS Linux release 7.2.1511 (Core) 设置ulimit -c ulimited 依旧无法生成co ...

  6. ABAP OO与ALV结合方式探索(2)

    接上篇 一开始设计的BO 类是为了实现功能而实现功能 从类的单一职责的角度而言 先把这个BO对象拆分   这里又有一个需要考虑的点:   如何传递内表数据到ALV 如果引入一个中间变量,数据就会被do ...

  7. ubuntu设置关闭屏幕和锁定

    见链接:http://askubuntu.com/questions/177348/how-do-i-disable-the-screensaver-lock If you want to wrap ...

  8. 《Linux系统 date、cal、hwclock时间命令的用法》

    date命令的用法: [root@apache ~]# date //查看当前系统的时间 Sat Jun 14 13:46:02 CST 2014 [root@apache ~]# date -s & ...

  9. VIM中的寄存器简介

    原来在vim粘贴从其他地方复制过来的文本的时候,一直用的shift + inert,那时就想,能不能够直接就像p那样粘贴,不必非得进入插入模式再来粘贴.后来看了<vim实用技巧>上关于vi ...

  10. WPF 类型“System.ComponentModel.ISupportInitialize”在未被引用的程序集中定义。

    问题:类型“System.ComponentModel.ISupportInitialize”在未被引用的程序集中定义.必须添加对程序集“System, Version=4.0.0.0, Cultur ...