中位数

题目描述

小\(N\)得到了一个非常神奇的序列\(A\)。这个序列长度为\(N\),下标从\(1\)开始。\(A\)的一个子区间对应一个序列,可以由数对\([l,r]\)表示,代表\(A[l],A[l + 1]\) ..., A[r]\(这段数。对于一个序列\)B[1], B[2], ..., B[k]$,定义B的中位数如下:

  1. 先对B排序。得到新的序列\(C\)。
  2. 假如\(k\)是奇数,那么中位数为\(C[\frac{k+1}{2}]\)。假如\(k\)为偶数,中位数为\(C[\frac{k}{2}]\)。

    对于\(A\)的所有的子区间,小\(N\)可以知道它们对应的中位数。现在小\(N\)想知道,所有长度\(>=Len\)的子区间中,中位数最大可以是多少。

输入描述:

第一行输入两个数\(N\),\(Len\)。

第二行输入序列\(A\),第\(i\)个数代表\(A[i]\)。

输出描述:

一行一个整数,代表所有长度\(>=Len\)的子区间中,最大的中位数。

备注:

数据范围:

30%: n <= 200

60%: n <= 2000

另外有20%:不超过50个不同的数

100%:1<=Len<=n<=10^5, 1 <= a[i] <= 10^9


话说本来写二分,但是被问了,为什么有单调性啊,大的成为中位数小的不一定啊

然后给迷住了

事实上,我们二分答案,得到的不是”答案大于它还是小于它“这样一个东西吗,而不是”它是否可以成为答案“,而且本来就是在求最大值娅

二分以后,把>=的置1,<的置-1

然后我们判断有没有一个长度大于len的区间大于0就可以了

处理前缀和最小值,扫描前缀和就可以了


Code:

#include <cstdio>
#include <algorithm>
const int N=1e5+10;
int a[N],b[N],f[N],n,len;
int min(int x,int y){return x<y?x:y;}
bool check(int p)
{
for(int i=1;i<=n;i++) f[i]=(a[i]>=p?1:-1)+f[i-1];
for(int mi=0,i=len;i<=n;i++)
{
mi=min(mi,f[i-len]);
if(f[i]>mi) return true;
}
return false;
}
int main()
{
scanf("%d%d",&n,&len);
for(int i=1;i<=n;i++) scanf("%d",a+i),b[i]=a[i];
std::sort(b+1,b+1+n);
int m=std::unique(b+1,b+1+n)-b-1;
for(int i=1;i<=n;i++)
a[i]=std::lower_bound(b+1,b+1+m,a[i])-b;
int l=1,r=m;
while(l<r)
{
int mid=l+r+1>>1;
if(check(mid))
l=mid;
else
r=mid-1;
}
printf("%d\n",b[l]);
return 0;
}

2018.9.9

牛客 NOIp模拟1 T1 中位数 解题报告的更多相关文章

  1. 牛客 NOIp模拟1 T3 保护 解题报告

    保护 题目描述 \(C\)国有\(n\)个城市,城市间通过一个树形结构形成一个连通图.城市编号为\(1\)到\(n\),其中\(1\)号城市为首都.国家有\(m\)支军队,分别守卫一条路径的城市.具体 ...

  2. 牛客OI周赛7-普及组 解题报告

    出题人好评. 评测机差评. A 救救喵咪 二位偏序.如果数据范围大的话直接树状数组,不过才1000就\(O(n^2)\)暴力就ok了. #include <bits/stdc++.h> s ...

  3. 牛客练习赛 小A与任务 解题报告

    小A与任务 链接: https://ac.nowcoder.com/acm/contest/369/B 来源:牛客网 题目描述 小A手头有 \(n\) 份任务,他可以以任意顺序完成这些任务,只有完成当 ...

  4. nowcoder(牛客网)OI测试赛2 解题报告

    qwq听说是一场普及组难度的比赛,所以我就兴高采烈地过来了qwq 然后发现题目确实不难qwq.....但是因为蒟蒻我太蒻了,考的还是很差啦qwq orz那些AK的dalao们qwq 赛后闲来无事,弄一 ...

  5. Solution -「牛客 NOIP 模拟赛」打拳

    \(\mathcal{Description}\)   现 \(2^n\) 个人进行淘汰赛,他们的战力为 \(1\sim 2^n\),战力强者能战胜战力弱者,但是战力在集合 \(\{a_m\}\) 里 ...

  6. 牛客OI赛制测试赛3 解题报告

    前话: 话说考试描述:普及难度. 于是想在这场比赛上涨点信心. 考出来的结果:Point:480     Rank:40 然而同机房的最好成绩是 510. 没考好啊!有点炸心态,D题一些细节没有注意, ...

  7. nowcoder(牛客网)OI测试赛3 解题报告

    昨天因为胡搞了一会儿社团的事情,所以错过(逃过)了nowcoder的测试赛..... 以上,听说还是普及组难度qwq,而且还有很多大佬AK(然而我这么蒻肯定还是觉得有点难度的吧qwq) 不过我还是日常 ...

  8. NOIP模拟2017.6.11解题报告

    T1: 水题: 代码: #include <cstdio> #include <iostream> #include <algorithm> using names ...

  9. NOIP模拟赛-旅行者问题 解题报告

    旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...

随机推荐

  1. 将 cmd 中命令输出内容保存为 TXT 文本文件

    如果执行的命令输出内容较多,那么 cmd 控制台将会自动清除前面的内容,那么如何将屏幕的所有内容导出到文本文件? 下面给出简单的演示例子 ping百度,不会自动结束,按 Ctrl+C 强制结束,pin ...

  2. js如何获得系统时间年月日时分秒

    javascript 自带有个对象(构造函数),Date().下面是代码: 回答一: var now = new Date();  var nowTime = now.toLocaleString() ...

  3. PHP脚本执行效率性能检测之WebGrind的使用

    webgrind这个性能检测是需要xdebug来配合,因为webgrind 进行性能检测分析就是通过xdebug生成的日志文件进行编译分析的 那么这就需要们配置好xdebug,这个一般的php 版本都 ...

  4. Pandas 数据读取

    1.读取table # 读取普通分隔数据:read_table # 可以读取txt,csv import os os.chdir('F:/') #首先设置一下读取的路径 data1 = pd.read ...

  5. 尺取法 poj 2566

    尺取法:顾名思义就是像尺子一样一段一段去取,保存每次的选取区间的左右端点.然后一直推进 解决问题的思路: 先移动右端点 ,右端点推进的时候一般是加 然后推进左端点,左端点一般是减 poj 2566 题 ...

  6. Git-补丁文件交互

    版本库间的交互是通过git push和/或git pull命令实现的,这是Git最主要的交互模式,但并不是全部.使用补丁文件是另外一种交互方式,适用于参与者众多的大型项目进行分布式开发. 创建补丁 G ...

  7. 挂个AC自动机

    struct ACM{ ],f[N],cnt[N]; int sz,rt; int ins(char *s){ int n=strlen(s),u=rt; ;i<n;i++){ int c=s[ ...

  8. [转]Android进程间通信--消息机制及IPC机制实现

    Android为了屏蔽进程的概念,利用不同的组件[Activity.Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Servi ...

  9. 剑指Offer - 九度1369 - 字符串的排列

    剑指Offer - 九度1369 - 字符串的排列2014-02-05 21:12 题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所 ...

  10. USACO Section2.3 Zero Sum 解题报告 【icedream61】

    zerosum解题报告----------------------------------------------------------------------------------------- ...