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 ...
随机推荐
- 【CSS3动画实战】Mailman Icon
周末闲来无事,就想着做点东西练练手.又苦于自己 PS 水平太差,设计不出什么好看的东西. 干脆就在 Dribbble 上逛一逛,看看有什么看起来比较屌的,实际上却很简单的东西. 一共做了 3 个,均已 ...
- HDU 4277 USACO ORZ(暴力+双向枚举)
USACO ORZ Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 深度解析Struts2中ValueStack
1.什么是ValueStack 对于每一个action的调用,Struts在执行相应的动作方法之前会先创建一个名为ValueStack的对象.Value Stack用来保存该动作对象或者对象.由于最终 ...
- java语法基础(三)
类和对象 面向对象语言概述 java是一种面向对象的语言,什么是面向对象的语言? 要搞清楚什么是面向对象语言,我们需要相对的了解一下面向过程的语言. java入门阶段,我们又给大家说过一些语言的分类, ...
- WCF Rest post请求
只有遇到问题才能解决问题,这个问题之前也遇到过因为没有及时总结所以这个问题又重新出现困扰了我8个小时. ajax 请示WCF Rest 是一个比较成熟的技术.所以 涉及到了几个技术点 1 jquery ...
- linux下nginx模块开发入门
本文模块编写参考http://blog.codinglabs.org/articles/intro-of-nginx-module-development.html 之前讲了nginx的安装,算是对n ...
- Hibernate、Spring和Struts2工作原理
Hibernate.Spring和Struts2工作原理 博客分类: Java 基础 工作HibernateSpringMVCStruts Hibernate.Spring和Struts2工作原理 ...
- 牛客练习赛13D:幸运数字Ⅳ(康托展开) F:关键字排序
链接:https://www.nowcoder.com/acm/contest/70/D 题目: 定义一个数字为幸运数字当且仅当它的所有数位都是4或者7. 比如说,47.744.4都是幸运数字而5.1 ...
- 【转】vue中的钩子函数。。
前言 在vue开发SPA应用的过程中,多数情况下我们需要解决一个问题 就是在路由跳转的过程中需要更新你SPA应用的 title , 这一节不说其他,就展示如何使用 vue-router 的 导航钩子 ...
- python-----flask项目端口设置无效
最近在做flask项目时发现了一个问题,在项目里写: app.run(host='0.0.0.0',port=9000) 但启动时,还是使用5000端口启动的. 后来经过测试,解决方法有两个: 如果启 ...