CF1486D Max Median

题意:

给定一个长度为 n 的序列 a,求所有长度 ≥k 的连续子序列中,中位数的最大值。定义中位数是一个长度为 x 的序列升序排序后的第 ⌊x+12⌋\left\lfloor\frac{x+1}{2}\right\rfloor⌊2x+1​⌋位的值。

题解:

我第一反应是二分去判断,但是不知道该怎么判断中位数这个条件
题目中定义的中位数的排序后最中间的数,假设中位数为mid,也就是说有一半以上的数>=mid,那二分不就好判断了,我们二分mid值,然后将所有小于mid的值赋为-1,大于等于mid的赋值为1,现在问题就是是否存在一个区间长度大于等于k的区间值>=0
我们用sum来记录赋值后的前缀和,用minn[i]表示min(sum[j]),j∈[1,i]min(sum[j]),j∈[1,i]min(sum[j]),j∈[1,i]。这样就是判断sum[i]-sum[i-k]是否大于等于0

代码:

// Problem: D. Max Median
// Contest: Codeforces - Codeforces Round #703 (Div. 2)
// URL: https://codeforces.com/contest/1486/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// By Jozky#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{#ifdef ONLINE_JUDGE
#elsestartTime= clock();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn= 2e5 + 9;
int a[maxn];
int n, k;
int b[maxn];
int sum[maxn];
int minn[maxn];
bool check(int x)
{for (int i= 1; i <= n; i++) {b[i]= (a[i] >= x) ? 1 : -1;}minn[0]= INF_int;for (int i= 1; i <= n; i++) {sum[i]= sum[i - 1] + b[i];minn[i]= min(minn[i - 1], sum[i]);}minn[0]=0;for (int i= k; i <= n; i++) {if (sum[i] - minn[i - k] > 0)return 1;}return 0;
}
int main()
{//rd_test();cin >> n >> k;for (int i= 1; i <= n; i++) {cin >> a[i];}int l= 0, r= n;int ans= -1;while (l < r) {int mid= l + r >> 1;if (check(mid)) {ans= mid;l= mid;}elser= mid - 1;}cout << ans << endl;//Time_test();
}

CF1486D Max Median相关推荐

  1. CodeForces - 1486D Max Median(二分+最长连续子段和)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,现在从长度至少为 kkk 的连续子段中,找到最大的中位数 题目分析:做过平均数的模型:POJ - 2018 Best Cow Fences ...

  2. Max Median

    Max Median 题目链接:点这里 题目大意:给你n个数和一个范围k,让你从n个数里连续选不小于k个数,然后进行排序找中位数,让你求出最大的中位数. 题解:这是很有意思的一道题,我们可以用二分来进 ...

  3. Codeforces Round #703 (Div. 2) D. Max Median

    题意:给一个长度为n的序列,对于一个区间长度不小于k的子区间,中位数为这个区间排序后的第(k+1)/2个数字.现在求所有的长度不小于k的子区间,中位数的最大值是多少. 思路:首先要想到,对于一个中位数 ...

  4. Codeforces Round #703 (Div. 2) D . Max Median 二分 +思维

    传送门 题意: 给定一个数组和k,求一段连续区间中位数最大值,连续区间长度>=k. 如果=k的话可以直接秒了,这里是>=k,我们可以通过二分让后利用>=k这个条件来检查答案. 二分中 ...

  5. median函数 oracle9i,oracle10g学习笔记

    1.简介 1.1.sql:Structured Query Language 结构化查询语言 1.2.windows在目录路径中使用反斜线\,unix和linux使用正斜线/ 1.3.Number(a ...

  6. Oracle 聚合函数(Aggregate Functions)说明

    Oracle Aggregate Functions用过很多,官网的说明如下: Aggregate Functions http://docs.oracle.com/cd/E11882_01/serv ...

  7. locust压测工具:测试信息输出与分布式模式

    locust压测环境描述 本文环境python3.5.2 locust版本0.9.0 locust测试信息输出与分布式模式 本文将主要分析两个方面的内容: 1.locust在启动运行在跑测试用例的时候 ...

  8. Codeforces Round #703 (Div. 2)(A ~ F)超高质量题解【每日亿题2 / 19】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A. Shifting Stacks B - Eastern Exhibition C1 - G ...

  9. 求介绍matlab函数用法的书,MATLAB初学者教程--函数用法的简单介绍

    1.4 函数用法的简单介绍 1.4.1什么是函数 似乎很多人一听到函数这个词就会想到数学中的某个概念,然后对于恐惧数学的同学就开始打退堂鼓.在matlab当中到处可以用到函数,它的出现可以让我们用很简 ...

最新文章

  1. [NOI2005]维护数列
  2. Bzoj1123 Blockade
  3. 一篇文章搞懂JavaScript运行机制
  4. php敏感字符串过滤_PHP代码审计入门:常见的危险函数和审计点
  5. 告别程序员生涯,一点感慨,与诸君共勉(转)
  6. python运算符中用来计算整商的是什么_零基础学python,看完这篇文章,你的python基础就差不多了...
  7. 第39天-进程 _1(2013.09.11)
  8. API 应该享受版权保护吗?
  9. php 手册中show的使用,文档工具--showdoc(一)
  10. TortoiseSVN修改服务器地址的方法
  11. 机器学习之问题建模(一)
  12. Project 3 :Python爬虫源码实现抓取1000条西刺免费代理IP-HTTPS并保存读取
  13. 电力拖动自动控制系统复习(四)
  14. 使用计算机组成原理全加器设计,杭电计算机组成原理全加器设计实验1
  15. FIL是否值得长期持有以及未来评估
  16. 网页上的内容无法选中复制该如何解决?
  17. java 23种设计模式 04 单例模式
  18. B.系数 (Lucas定理)
  19. java有声小说如何开发_怎么才能做有声小说播音?有声书主播如何训练?
  20. AI中数据标注(Labeling)的介绍

热门文章

  1. 2020年高考数学试题难吗?历史上最难数学卷不是2003!
  2. 快别发语音了! | 今日最佳
  3. 史上最硬核文科生,擅长解决数学难题,却视考试成为终生噩梦
  4. java 有没有with语句_Java中的try-with-resources语句
  5. java web容器_Java Web容器安全
  6. mysql xa 演示_mysql的XA事务恢复过程详解
  7. linux 信号_Linux中的信号处理机制 [四]
  8. php 获取对象所有成员变量,PHP成员变量获取对比
  9. 未发现android设备,Brother iPrintScan 应用程序上出现错误信息“未发现支持设备”(Android™ 智能手机)。...
  10. 数据结构——基于 Dijsktra 算法的最短路径求解