思路:

转化为RMQ。

实现:

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = ;
const int INF = 0x3f3f3f3f; int a[MAXN], tree[MAXN * ], n, m, sum[MAXN]; void build(int num, int l, int r)
{
if (l == r) { tree[num] = a[l]; return; }
int m = l + r >> ;
build(num * , l, m);
build(num * + , m + , r);
tree[num] = max(tree[num * ], tree[num * + ]);
} int query(int num, int l, int r, int x, int y)
{
if (x <= l && y >= r) return tree[num];
int ans = -INF, m = l + r >> ;
if (x <= m) ans = max(ans, query(num * , l, m, x, y));
if (y >= m + ) ans = max(ans, query(num * + , m + , r, x, y));
return ans;
} int main()
{
while (scanf("%d", &n), n)
{
memset(a, , sizeof a);
memset(sum, , sizeof sum);
scanf("%d", &m);
int last = -INF, tmp, now = ;
for (int i = ; i <= n; i++)
{
scanf("%d", &tmp);
if (tmp == last) a[now]++;
else last = tmp, a[++now]++;
}
build(, , now);
for (int i = ; i <= now; i++) sum[i] = sum[i - ] + a[i];
int l, r;
for (int i = ; i < m; i++)
{
scanf("%d %d", &l, &r);
int ls = lower_bound(sum, sum + now + , l) - sum;
int rs = lower_bound(sum, sum + now + , r) - sum;
int ans = -;
if (ls == rs) ans = r - l + ;
else
{
ans = max(sum[ls] - l + , r - sum[rs - ]);
if (rs - ls > ) ans = max(ans, query(, , now, ls + , rs - ));
}
printf("%d\n", ans);
}
}
return ;
}

poj3368 Frequent values的更多相关文章

  1. poj3368 Frequent values(线段树)

    Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In ad ...

  2. POJ3368 Frequent values(RMQ线段树)

    题目大概说给一个递增序列,询问区间出现最多的数. 用莫队算法比较直观,虽然应该会T..好像也可以主席树..不过题目给的序列是有序的,因而相同的数会聚在一起. 考虑把序列分成一段一段,使每段都包含极大的 ...

  3. [poj3368]Frequent values(rmq)

    题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. 解题关键:统计次数,转化为RMQ问题,运用st表求解,注意边界. 预处理复杂度:$O(n\log n)$ ...

  4. POJ3368(Frequent values)--线段树

    题目在这里 3368 Accepted 7312K 1829MS C++ 6936B 题意为给你一组数据,再给定一组区间,问你这个区间内出现次数最多的元素的次数是多少. 我还记得这题是学校校赛基础的题 ...

  5. UVA - 11235 Frequent values

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

  6. poj 3368 Frequent values(RMQ)

    /************************************************************ 题目: Frequent values(poj 3368) 链接: http ...

  7. H - Frequent values

    Problem F: Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasi ...

  8. Frequent values && Ping pong

    Frequent values 题意是不同颜色区间首尾相接,询问一个区间内同色区间的最长长度. 网上流行的做法,包括翻出来之前POJ的代码也是RMQ做法,对于序列上的每个数,记录该数向左和向右延续的最 ...

  9. 【暑假】[实用数据结构]UVa11235 Frequent values

    UVa 11235 Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11241   Accep ...

随机推荐

  1. NS3网络仿真(9): 构建以太网帧

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3使用了一个叫Packet的类来表示一个数据帧,本节尝试用它构造一个以太网帧. 以下是一个典 ...

  2. C项目实践--图书管理系统(1)

    1.功能需求分析 图书管理系统主要用于对大量的图书信息,包括书名.作者.出版社.出版日期.ISBN(书号)等进行增.删.改.查以及保存等操作.同时也包括对用户的管理,用户包括管理员和普通用户两种权限, ...

  3. C从控制台(stdin)输入带空格的字符串到字符数组中

    用scanf("%s",array); 的话遇到空格就停止接收后面的字符了,那怎么才能接收带空格的字符串呢? 1.用 gets() ,它可以接收带空格的字符串, 直到回车才结束输入 ...

  4. Oracle - 查询语句 - 分组函数

    /* 分组函数 不能再select子句中出现普通的列,除非这个列在group by中给出 所有的空值都会被分为一组 分组过滤 SELECT FROM WHERE GROUPBY HAVING ORDE ...

  5. 编译Android VNC Server【转】

    本文转载自:http://www.cnblogs.com/fengfeng/p/3289292.html 1,在如下地址checkout源代码,我checkout的版本为0.9.7http://cod ...

  6. Buildroot 龙芯1C支持指南

    本文转载自:https://github.com/pengphei/smartloong-sphinx/blob/master/source/cn/loongson1c_buildroot_guide ...

  7. idea项目文件名为红色的解决办法

    设置项目的版本控制为none或者对应的版本控制,如下图,添加对应项目的版本控制为none:

  8. python from import与import as 的含义

    from os import makedirs, unlink, sep #从os包中引入 makedirs.unlink,sep类 from os.path import dirname, exis ...

  9. js追加子元素

    在页面加载完毕后,向div元素追加span子元素 <html><head><title>js</title><script type=" ...

  10. Extjs 3 Grid相关操作

    extjs gridpanel 操作行 得到选中行的列   var model = grid.getSelectionModel();   model.selectAll(); //选择所有行 mod ...