poj3368 Frequent values
思路:
转化为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的更多相关文章
- poj3368 Frequent values(线段树)
Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In ad ...
- POJ3368 Frequent values(RMQ线段树)
题目大概说给一个递增序列,询问区间出现最多的数. 用莫队算法比较直观,虽然应该会T..好像也可以主席树..不过题目给的序列是有序的,因而相同的数会聚在一起. 考虑把序列分成一段一段,使每段都包含极大的 ...
- [poj3368]Frequent values(rmq)
题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. 解题关键:统计次数,转化为RMQ问题,运用st表求解,注意边界. 预处理复杂度:$O(n\log n)$ ...
- POJ3368(Frequent values)--线段树
题目在这里 3368 Accepted 7312K 1829MS C++ 6936B 题意为给你一组数据,再给定一组区间,问你这个区间内出现次数最多的元素的次数是多少. 我还记得这题是学校校赛基础的题 ...
- UVA - 11235 Frequent values
2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...
- poj 3368 Frequent values(RMQ)
/************************************************************ 题目: Frequent values(poj 3368) 链接: http ...
- H - Frequent values
Problem F: Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasi ...
- Frequent values && Ping pong
Frequent values 题意是不同颜色区间首尾相接,询问一个区间内同色区间的最长长度. 网上流行的做法,包括翻出来之前POJ的代码也是RMQ做法,对于序列上的每个数,记录该数向左和向右延续的最 ...
- 【暑假】[实用数据结构]UVa11235 Frequent values
UVa 11235 Frequent values Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11241 Accep ...
随机推荐
- NS3网络仿真(9): 构建以太网帧
快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3使用了一个叫Packet的类来表示一个数据帧,本节尝试用它构造一个以太网帧. 以下是一个典 ...
- C项目实践--图书管理系统(1)
1.功能需求分析 图书管理系统主要用于对大量的图书信息,包括书名.作者.出版社.出版日期.ISBN(书号)等进行增.删.改.查以及保存等操作.同时也包括对用户的管理,用户包括管理员和普通用户两种权限, ...
- C从控制台(stdin)输入带空格的字符串到字符数组中
用scanf("%s",array); 的话遇到空格就停止接收后面的字符了,那怎么才能接收带空格的字符串呢? 1.用 gets() ,它可以接收带空格的字符串, 直到回车才结束输入 ...
- Oracle - 查询语句 - 分组函数
/* 分组函数 不能再select子句中出现普通的列,除非这个列在group by中给出 所有的空值都会被分为一组 分组过滤 SELECT FROM WHERE GROUPBY HAVING ORDE ...
- 编译Android VNC Server【转】
本文转载自:http://www.cnblogs.com/fengfeng/p/3289292.html 1,在如下地址checkout源代码,我checkout的版本为0.9.7http://cod ...
- Buildroot 龙芯1C支持指南
本文转载自:https://github.com/pengphei/smartloong-sphinx/blob/master/source/cn/loongson1c_buildroot_guide ...
- idea项目文件名为红色的解决办法
设置项目的版本控制为none或者对应的版本控制,如下图,添加对应项目的版本控制为none:
- python from import与import as 的含义
from os import makedirs, unlink, sep #从os包中引入 makedirs.unlink,sep类 from os.path import dirname, exis ...
- js追加子元素
在页面加载完毕后,向div元素追加span子元素 <html><head><title>js</title><script type=" ...
- Extjs 3 Grid相关操作
extjs gridpanel 操作行 得到选中行的列 var model = grid.getSelectionModel(); model.selectAll(); //选择所有行 mod ...