20161005 NOIP 模拟赛 T2 解题报告
beautiful
2.1 题目描述
一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] 中位数为 ai(我们比较序列中两个位置的数的大小时, 以数值为第一关键字,下标为第二关键字比较。这样的话 [l, r] 的长度只有可能是奇数),r - l + 1 就是 i 的优美值。 接下来有 Q 个询问,每个询问 [l, r] 表示查询区间 [l, r] 内优美值的最大值。
2.2 输入
第一行输入 n 接下来 n 个整数,代表 ai 接下来 Q,代表有 Q 个区间接下来 Q 行,每行 两个整数 l, r(l ≤ r),表示区间的左右端点
2.3 输出
对于每个区间的询问,输出答案
2.4 Sample Input
8
16 19 7 8 9 11 20 16
8
3 8
1 4
2 3
1 1
5 5
1 2
2 8
7 8
2.5 Sample Output
7
3
1
3
5
3
7
3
3
2.6 数据范围及约定
对于 30% 的数据,满足 n,Q ≤ 50
对于 70% 的数据,满足 n,Q ≤ 2000 对于所有数据,满足 n ≤ 2000, Q ≤ 100000,ai ≤ 200
———————————————分割线———————————————
考试没有理解这道题,导致连暴力都没有写出来,本题直接爆零。
看完标程和解题报告后豁然开朗。
n2 预处理。对于每个数,往左往右各扫一遍,遇到大于它的数则状态 S++,小于则 S--, 由题目定义可知没有相等的。然后记录下每个状态 S 的最长长度,然后枚举左边的状态,找右边的状态,取 max 计算出优美值。 接着就是一个纯 RMQ 的问题了.
#include "cstdio"
#include "cstring"
#include "iostream" using namespace std ;
const int maxN = ;
const int INF = ;
typedef long long QAQ ; int L[ maxN ] , R[ maxN ] , w[ maxN ] , A[ maxN ] ; inline int max ( int x , int y ) { return x < y ? y : x ;} void Init ( int n ) {
for ( int i= ; i<=n ; ++i ) {
memset ( L , , sizeof ( L ) ) ;
memset ( R , , sizeof ( R ) ) ;
L[ n ] = ; R[ n ] = ;
int _cnt = ; for ( int j = i - ; j>= ; --j ) {
if ( A[ j ] > A[ i ] ) ++_cnt ;
else if ( A[ j ] <= A[ i ] ) --_cnt ;
L[ n + _cnt ] = i - j ;
} _cnt = ;
for ( int j = i + ; j <= n ; ++j ) {
if ( A[ j ] >= A[ i ] ) ++_cnt ;
else if ( A[ j ] < A[ i ] ) --_cnt ;
R[ n + _cnt ] = j - i ;
} for ( int j = - i ; j <= i - ; ++j ) {
if ( L[ n + j ] >= && R[ n - j ] >= ) {
w [ i ] = max ( w [ i ] , L[ n + j ] + R[ n - j ] + ) ;
}
}
}
}
int main ( ) {
int N , T , l , r ;
scanf ( "%d" , &N ) ;
for ( int i= ; i<=N ; ++i ) {
scanf ( "%d" , A + i ) ;
}
Init ( N ) ;
scanf ( "%d" , &T ) ;
while ( T-- ) {
QAQ ans = -INF ;
cin >> l >> r ;
for ( int i=l ; i<=r ; ++i ) ans = max ( ans , w[ i ] ) ;
printf ( "%I64d\n" , ans ) ;
}
}
Beauitiful
NOIP_RP++;
2016-10-08 00:18:20
(完)
20161005 NOIP 模拟赛 T2 解题报告的更多相关文章
- 20161003 NOIP 模拟赛 T2 解题报告
Weed duyege的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,duyege 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 ...
- 20161005 NOIP 模拟赛 T3 解题报告
subset 3.1 题目描述 一开始你有一个空集,集合可以出现重复元素,然后有 Q 个操作 1. add s 在集合中加入数字 s. 2. del s 在集合中删除数字 s.保证 s 存在 3. c ...
- 20161023 NOIP 模拟赛 T2 解题报告
Task 2.回文串计数 (calc.pas/calc.c/calc.cpp) [题目描述] 虽然是一名理科生,Mcx常常声称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名的热爱,这也促使他 ...
- 【HHHOJ】NOIP模拟赛 玖 解题报告
点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- NOIP欢乐模拟赛 T2 解题报告
小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...
- CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告
T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...
- CH Round #54 - Streaming #5 (NOIP模拟赛Day1)解题报告
最近参加了很多CH上的比赛呢~Rating--了..题目各种跪烂.各种膜拜大神OTZZZ T1珠 描述 萌蛋有n颗珠子,每一颗珠子都写有一个数字.萌蛋把它们用线串成了环.我们称一个数字串是有趣的,当且 ...
- 20161007 NOIP 模拟赛 T1 解题报告
排序 3.1 题意描述 众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能.常见的排序算法有冒泡 排序.归并排序.快速排序.奇偶排序.猴子排序.梳排序.鸡尾酒排序.臭皮匠排序等. 在这里,介绍 ...
随机推荐
- 与你相遇好幸运,mbview的mbtiles文件分析
mbview是一个查看.mbtiles文件的本地程序. https://github.com/mapbox/mbview .mbtiles文件就是一个Sqlite文件,用Navicat Premium ...
- Linux性能分析工具的安装和使用
转自:http://blog.chinaunix.net/uid-26488891-id-3118279.html Normal 0 7.8 磅 0 2 false false false EN-US ...
- 在ubuntu上搭建开发环境10---英文版ubuntu安装中文输入法
之前安装 ubuntu时候选择安装英文版,但是在查资料的时候难免的要输入中文所以自己弄了一下中文输入法的安装 我安装的是fcitx小企鹅输入法 下面介绍一下安装的过程..... ubuntu默认的 ...
- 安装oracle 12c RAC遇到的一些问题
(1) 安装grid软件,停止在38%很长时间不动,日志显示正常 解决方法: 由于是虚拟机安装,设置的内存为600M,关闭虚拟机,把内存调成1GB,问题解决~在38%Linking RMAN Ut ...
- OpenCV-paper detection & perspective transformation 相关资料
经过一段时间的搜索,决定把搜过的资料都汇集在此,以免重复劳动,几乎来自stackoverflow OpenCV C++/Obj-C: Detecting a sheet of paper / Squa ...
- JavaScript 简介
JavaScript是一种专为网页交互而设计的脚本语言,由下列三个不同的部分组成: ECMAScript,由ECMA-262 定义,提供核心语言功能: DOM, 提供访问和操作网页内容的方法和接口; ...
- Visual Studio Code升级到0.5,提供对ES6的更好支持
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:题目即题记. 自从Visual Studio Code发布之后(最初是0.1),微软就 ...
- java 访问 usb
java 要访问 usb 设备,通常要自己写c/c++代码,然后再用 java 访问这些组件,以达到控制usb设备的目的.但现在有一个开源组件 libusb 帮我们做好了访问usb设备的封装(包括wi ...
- Error:“应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。”
我的电脑是 win7 64bit,用 VS2012 跑网上下载的程序,Realease | x64 模式下出现该错误. 问题出在 freeglut.dll 是 32bit 下的 dll,需要换成 64 ...
- 学习iOS的网站
ios开发者 http://www.codeios.com/ cocoachina http://www.cocoachina.com code4app http://code4app.com ...