AtCoder Regular Contest 101 - D Median of Medians (二分+偏序)

【Atcoder - ARC101D/ABC107D】Median of Medians @Median of Medians@ @Median of Medians@ @题目描述 - English@ @题目大意@ @分析@ @代码实现@ @END@ @题目描述 - English@ Time limit : 2sec / Memory limit : 1024MB Score : 700 points Problem Statement We w... 阅读详情

https://arc101.contest.atcoder.jp/tasks/arc101_b

 

题意:

给你一个序列。对于每个区间[l,r]都会有一个中位数,为x[len/2+1]。

所以共有(1+n)*n/2个中位数,这些中位数再取中位数。问你这个中位数是多少。

 

POINT:

二分答案,假设x是那么多中位数序列b的中位数,即答案。

那么b中一定有至少\left \lceil len/2 \right \rceil个元素>=x。 然后x为最大的且满足条件。

所以问题就变成了,计算有多少个区间,他的中位数>=x。

把原序列改变一下,如果元素>=x,变为1,反之变为-1。

然后求区间和,区间和>=0的话,他的中位数肯定>=x(这个是重点)。

理解了这个之后,问题就变成了如何快速求有多少个区间和>=0。

求一个前缀和sum[]。 那么sum[r]-sum[l-1]>=0,就表示区间和>=0。

即sum[r]>=sum[l-1]。 可以用逆序对的方法求得。

不过sum可能为负数,所以还是用归并求吧。用树状数组比较麻烦了。

只是做了一点微小的翻译工作。

 

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define LL long long
const int N = 1e5+5;

int a[N],sum[N],n;
int temp[N];

LL mergesort(int l,int r)
{
	if(l>=r) return 0;
	int mid=(l+r)>>1;
	LL ans=mergesort(l,mid)+mergesort(mid+1, r);
	int ll=l,rr=mid+1;
	int cnt=0;
	while(ll<=mid&&rr<=r){
		if(sum[rr]>=sum[ll]){
			temp[++cnt]=sum[ll++];
		}else{
			ans+=ll-l;
			temp[++cnt]=sum[rr++];
		}
	}
	while(ll<=mid){
		temp[++cnt]=sum[ll++];;
	}
	while(rr<=r){
		ans+=mid-l+1;
		temp[++cnt]=sum[rr++];
	}
	for(int i=1;i<=cnt;i++){
		sum[l+i-1]=temp[i];
	}
	return ans;
}

LL check(int x)
{
	LL ans=0;
	for(int i=1;i<=n;i++){
		sum[i]=sum[i-1]+(a[i]>=x?1:-1);
		if(sum[i]>=0)
			ans++;
	}
	return ans+mergesort(1,n);
}


int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	int l=1,r=1e9;
	LL aim=(1LL+n)*n/2;
	while(l<r){
		int mid=(l+r+1)/2;
		if(check(mid)>=(aim+1)/2){
			l=mid;
		}else{
			r=mid-1;
		}
	}
	cout<<l<<endl;
	return 0;
}

 

Mac用户必看:Typora最新版永久激活+弹窗屏蔽保姆级教程(附崩溃解决方案) 本文为Mac用户提供了一份详尽的Typora最新版永久激活与弹窗屏蔽教程。通过修改关键JS文件,实现软件激活状态并彻底关闭成功提示弹窗。文章深入剖析了操作原理,并重点提供了解决由此引发的多文档崩溃问题的实用临时方案,同时客观讨论了该方法的局限性与潜在风险。 阅读详情

相关推荐

从‘查理复用’到TM52F1363:深入剖析5脚188数码管的驱动原理与避坑指南

本文深入解析了5脚188数码管的驱动原理,重点介绍了查理复用技术如何通过5个IO引脚高效驱动188段显示,并详细探讨了TM52F1363单片机的寄存器配置与驱动实现。文章还提供了常见问题的解决方案和性能优化技巧,帮助开发者避免实际应用中的各种陷阱。

weixin_29159441的博客 478

F - Dist Max 2「二分答案」「二维偏序」「逆向思维」

F - Dist Max 2 题目描述: 给你n个点,求 max{min(|xi - xj|, |yi-yj|)},1 <= i,j <= n 思路: 显然是二分答案,但是check怎么写? 这里是有一点二维偏序的意思在里面,我们按照x从小到大排序,再此基础上,check(mid)的时候,遍历整个数组,维护一个minx,一个maxn,表示在这之前出现过的满足x的差值大于等于mid的y的最小值和最大值,用一个队列存下来还没产生贡献的点,然后对于遍历到的点,先去看看能不能继续更新minx 和m

Suryxin's blogs 439

Silvaco Atlas入门指南——从零开始掌握半导体器件仿真

本文为Silvaco Atlas半导体器件仿真软件的入门指南,详细介绍了从零开始掌握该工具的核心流程。内容涵盖Atlas的基本概念、仿真流程、核心文件(输入、结构、输出文件)、交互式与批处理两种操作模式,并逐步演示了如何从定义网格、划分区域、设置电极到进行掺杂、选择物理模型并求解,最终获取和分析器件特性的完整步骤。旨在帮助微电子相关专业人员和工程师快速上手这一强大的“数字实验室”,提升半导体器件设计与研发效率。

weixin_29306317的博客 401

算法笔记(15):二分偏序问题

二分偏序问题通常以i>(<,≥,≤)j,ui>(<,≥,≤)vji>(<,\ge,\le)j,u_i>(<,\ge,\le)v_ji>(<,≥,≤)j,ui​>(<,≥,≤)vj​等形式出现,求符合以上两种情况的有序对的个数,朴素来讲这种题目可以用O(n2)O(n^2)O(n2)的复杂度来解决,但可以用树状数组来优化,使其复杂度为O(nlog⁡n)O(n\log n)O(nlogn) 典型的二分偏序问题,逆序对 P1980 逆序对 首

weixin_51794966的博客 250

zabbix 监控EMC存储

经过搜索,找到了脚本地址,该项目应该是模板原作者创建的,该项目也有zabbix模板,和上面的应该是相同的,我用的是上面的模板。./unity_get_state.py --api_ip='X.X.X.X' --api_port='443' --api_user='zabbix' --api_password='PASSWORD' --storage_name="zabbix web前端配置的主机名" --discovery。修改权限,给zabbix用户执行权限,模板调用时以zabbix用户执行。

wangyfde的专栏 3754

【车载开发系列】ParaSoft单元测试环境配置(一)

bdf是数据文件的一种类型,表示一种数据库文件。在ParaSoft当中,可以使用bdf文件来快速创建一个测试项目。

千月星跡 2147

AtCoder Regular Contest 101 D - Median of Medians

二分答案 然后前缀和+树状数组来判断这个答案是否大于等于数 如果我们对于一个查询,如果小于这个数令为1,大于这个数领为-1 将所有前缀和放在树状数组中,就可以查询所有sum_{l} < sum_{r}的组合 #include <assert.h> #include <algorithm> #include <bitset> #include &l...

diankeng5481的博客 253

大话西游2单机版V8一键架设教程:5分钟搞定GM权限和仙玉修改(附完整物品代码表)

本文详细讲解了大话西游2单机版V8的一键架设教程,包括5分钟快速配置GM权限、仙玉修改及物品代码使用技巧。通过分步指导和服务端配置详解,帮助玩家轻松掌握游戏管理功能,重温经典回合制体验。附完整物品代码表,助你快速获取稀有道具和神兽。

weixin_42557830的博客 1230

atcoder abc107 D.Median of Medians(二分+前缀和+树状数组顺序对)

题目 给你一个序列a[] 其子区间的中位数定义为长度/2+1 子区间可以为一个点 如5/2+1=3,4/2+1=3等 求所有子区间的中位数的中位数 思路来源 https://www.cnblogs.com/henry-1202/p/9537952.html 题解 二分最后的中位数mid, 把原序列大于等于mid的标为1,小于mid的标为-1 如果一段子区间的和大于0,说明1多...

小衣同学的博客 985

Cadence Allegro 17.4 保姆级教程:PCB位号重排与反标回原理图完整避坑指南

本文详细解析了Cadence Allegro 17.4中PCB位号重排与反标回原理图的全流程,包括安全工程准备、智能重排策略和反标黄金法则。特别针对芯片封装协同设计(Co-Design)场景,提供可追溯的版本管理和故障恢复方案,帮助工程师避免常见位号陷阱,确保设计文件一致性。

weixin_30613433的博客 438

基于相场法模拟金属铜的晶粒的长大过程附matlab完整代码

晶粒生长是一种重要的材料形态演化过程,对于材料的性能和制备有着非常重要的影响。相场法是一种将材料结构和热力学性质联系起来的方法,它能够有效地模拟晶粒的长大过程并预测材料的结构和性能。本文所采用的相场模型是基于Cahn-Hilliard方程和Allen-Cahn方程的二次相场模型。其中,Cahn-Hilliard方程描述了晶界的自由能密度,而Allen-Cahn方程则描述了晶粒的彼此之间的界面能密度。本篇文章将介绍如何使用相场法模拟金属铜的晶粒的长大过程,并提供完整的MATLAB代码供读者参考。

m0_47037246的博客 1382

AtCoder Regular Contest 095 C - Many Medians(去掉一个数求中位数)

Problem StatementWhen l is an odd number, the median of l numbers a1,a2,…,al is the (l+12)-th largest value among a1,a2,…,al.You are given N numbers X1,X2,…,XN, where N is an even number. For each i=1...

深海沧澜的博客 1370

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Many Medians

http://icpc.upc.edu.cn/problem.php?cid=1706&amp;pid=4 #include&lt;cstdio&gt; #include&lt;algorithm&gt; using namespace std; int a[1000000],b[1090000],n,i,j,k; int main() { scanf("%d",&amp;n); ...

Amber的博客 228

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【二分答案】【平衡树】Atcoder ARC101D Median of Medians

分析: 答案的单调性是显然的,所以可以二分答案,把最值问题转化为判定性问题。 现在要求的就是:满足区间的中位数不超过xxx的区间数量。(x为我们二分的值) 定义一个ppp数组,满足pi=pi−1+[ai&amp;gt;x]pi=pi−1+[ai&amp;gt;x]p_i=p_{i-1}+[a_i&gt;x] 说白了就是求出:前i个数中有多少个超过了x 那么如果一个序列满足条件,就可以转化为满足这个式子: r...

氧化钠的博客 994

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

AtCoder Regular Contest 103 - D Robot Arms (二进制构造)

优秀的题解 补充: 根据这个方法,{1,2,4,8,,16,32,...2^k}这些边。 先用最大的2^k之后,新的位置离我们的目标问题肯定比2^k小。 所以可以用{1,2,4,8,,16,32,...2^k-1}这些边来形成。 这样一步步,就接近了终点。   #include &lt;stdio.h&gt; #include &lt;vector&gt; #include &lt...

Mr_Treeeee的博客 824

AtCoder Regular Contest 095 - E Symmetric Grid

E - Symmetric GridTime limit : 2sec / Memory limit : 256MBScore : 700 pointsProblem StatementThere is an H×W grid (H vertical, W horizontal), where each square contains a lowercase English letter. Spe...

Mr_Treeeee的博客 732

AtCoder Regular Contest 103 - E Tr/ee (图论的构造)

https://arc103.contest.atcoder.jp/tasks/arc103_c 题意: 连通分量大小,即一些点被连起来,这些点的个数。 给你一个01串: 如果第i个字符是1,那么我们一定可以移除一条边(且必须移除),来得到大小为i的连通分量。 如果是0,我们无法移除一条边,来得到大小为i的连通分量。(即,不管移除哪一条边都没有机会得到) 问你能不能构造出这棵树。  ...

Mr_Treeeee的博客 698

AtCoder Beginner Contest 082 - D - FT Robot (set||DP)

D - FT Robot Time limit : 2sec / Memory limit : 512MB Score : 500 points Problem Statement A robot is put at the origin in a two-dimensional plane. Initially, the robot is facing in th

Mr_Treeeee的博客 642

AtCoder Beginner Contest 103 - D Islands War (贪心)

题目   题意: 给你n个点,他们1到n依次从左到右连接。问你m对数(A,B)。AB不能相连。 问你最少要拆多少条边.   POINT: O(m)的做法: 记录每一个左端点,与他有争议的最近的右端点。记为a数组(可以贪心的知道断每一个右端点是最优的)。 那么假设断的是a[1],如果往后扫的有争议的右端点(比如a[2])比a[1]大,那么就只要断a[1]就行了。 如果比a[1]小...

Mr_Treeeee的博客 592

AtCoder Regular Contest 100 - D - Equal Cut (二分)

题目   题意: 给你一个区间,让你把区间分成连续的4份,他们各自元素总和。【最大的减去最小的】要最小。 问你最小差值。   POINT: 区间为ABCD。 把AB所在的区间称为左区间。CD为右区间。 把左区间尽量分成平均的2分。右区间也一样。 这样枚举n个答案。然后取最小就行了。   #include&lt;iostream&gt; #include&lt;stdio....

Mr_Treeeee的博客 566

AtCoder Beginner Contest 087 - D People on a Line

D - People on a Line Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement There are N people standing on the x-axis. Let the coordinate of Person i be xi.

Mr_Treeeee的博客 563

AtCoder Beginner Contest 109 - D - Make Them Even (贪心)

https://abc109.contest.atcoder.jp/tasks/abc109_d   题意: 给你一个n*m的矩阵,你可以让一个元素-1,然后选择一个和他相临(上下左右)的元素+1。每个元素只能减一次。 问你进行任意次操作后,矩阵中偶数元素最多。 输出操作次数,和具体操作过程。   POINT: 如果只有一行,那么很简单,从左到右扫,如果是奇数,那么往右边+1.,自...

Mr_Treeeee的博客 520

AtCoder Beginner Contest 083 - D - Wide Flip(思维)

D - Wide Flip Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement You are given a string S consisting of 0 and 1. Find the maximum integer K not greater t

Mr_Treeeee的博客 515

AtCoder Beginner Contest 105 - C Base -2 Number (负进制转换)

https://abc105.contest.atcoder.jp/tasks/abc105_c   题意: 给你一个n,让你转为【-2进制】。 输出S   POINT: 假设为k进制。 模拟正k进制转换可得以下操作。 找到最小的非负整数x使得当前数减x能被k整除,这个x将作为新的最高位写到结果中,然后当前数减去x再除以k。 负k进制也可以一样的操作。   #incl...

Mr_Treeeee的博客 498

AtCoder Regular Contest 097 - E - Sorted and Sorted (逆序对)

点击打开链接题意:给你黑白两种1-n编号的球。让你交换相邻的球,让黑i在黑i+1的上面。百i在白i+1的上面。POINT:dp[x][y]代表排好了白1-x和黑1-y 编号的球。dp[x][y]从dp[x-1][y]或dp[x][y-1]推出来。用树状数组算出逆序对。#include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;algor...

Mr_Treeeee的博客 497

AtCoder Regular Contest 100 - E Or Plus Max

题目   题意: 给你0-(2^n-1)个数,让你对每一个1&lt;=k&gt;=2^n-1的k,得出a[i]+a[j]最大,要求是i|j&lt;=k。 POINT: 既然要求是i|j&lt;=k,那么前面的答案就一定是后面的答案。 所以对于每一个K,我们要找i|j=k的答案就可以了。 找到k中的有1的数,即(1&lt;&lt;j&amp;k成立),那么(1&lt;&lt;j)^k这...

Mr_Treeeee的博客 489
上一篇: AtCoder Regular Contest 101 - C Candles
下一篇: 洛谷 - P3810 【模板】三维偏序(陌上花开)
Mr_Treeeee
博客等级 码龄10年 38粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值