[NOIP模拟]beautiful
【[NOIP模拟]beautiful】题目描述:
一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最长的一段 [l,r] ,满足 l≤i≤r,且 [l,r] 中位数为ai(我们比较序列中两个位置的数的大小时,以数值为第一关键字,下标为第二关键字比较。这样的话 [l,r] 的长度只有可能是奇数),r-l+1 就是 i 的优美值。接下来有 Q 个询问,每个询问 [l,r] 表示查询区间 [l,r] 内优美值的最大值。
输入格式:
第一行输入 n 。
接下来 n 个整数,代表 ai。
接下来 Q ,代表有 Q 个区间。
接下来 Q 行,每行两个整数 l,r (l≤r),表示区间的左右端点。
输出格式:
对于每个区间的询问,输出答案。
样例输入:
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
样例输出:
7
3
1
3
5
3
7
3
数据规模:
对于 30% 的数据,满足:n,Q≤50;
对于 70% 的数据,满足:n,Q≤2000;
对于所有数据,满足 n≤2000;Q≤100000;ai≤200 。
题目分析:
1、看到n,Q不是很大,我们如果先预处理出每个数的优美值,再比较询问区间中最大的,这一步可以用RMQ,每次询问O(1),总计复杂度(Q)。但这道题其实询问可以直接扫一遍,虽然O(n*Q),但是它不可能故意卡你,每次都从1扫到n,所以理想平均是(n/2*Q),当然还是数据水了一点点。
2、对于预处理优美值,可以枚举每一个数,对于它分别向左右两边依次扫,看他最长是哪个区间的中位数,注意第二关键字的处理,详细见代码,复杂度O(n^2)。
总的复杂度最小为:O(n^2+Q)。
附代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
推荐阅读
- 三门问题(蒙提霍尔悖论)分析与Golang模拟
- 投石机可连续抛射石头【Algodoo|投石机可连续抛射石头【Algodoo | 物理模拟】
- spring5源码系列--循环依赖|spring5源码系列--循环依赖 之 手写代码模拟spring循环依赖
- Code|Code Forces-681C(模拟题,优先队列,设计STL)
- jQuery之模拟实现$().animate()(上)
- 一个简单的TCP模拟实现(一)
- Injection|Injection For Xcode11 macOS 10.15 Catalina 亲测可用iOS模拟器UI界面调试实时刷新工具
- 康佳电视进入无线调试
- 【css灵感】模拟3D地球
- Python|Python socket 编程子模拟 HTTP GET 请求和响应