【洛谷T7153】(考试) 中位数
来源:互联网 发布:弘扬软件股份有限公司 编辑:程序博客网 时间:2024/05/18 22:44
题目描述
给定 n 个数 a1, a2, …, an,求这 n 个数两两的差值(共 n(n−1)
2 个)的中位数。
输入格式:
第一行一个正整数 n,表示数的个数。
接下来一行 n 个正整数,分别为 a1, a2, …, an。
输出格式:
一行一个数表示差值的中位数。
输入输出样例
输入样例#1:
3
4 2 6
输出样例#1:
2
题解
这里貌似没有数据范围。。。。
好吧
我补一下。。
30%数据保证O(n^2)能出解
100%数据n<=2000000,且结果是整数
首先,我们来看看30大暴力
依次求出所有的差(O(n^2))
排序,求解
但是,正解是啥?
先提前剧透一下:二分
我们每次二分出一个值(中位数)
然后判断是否可行
如何判断?首先对所有数进行一次排序
接着,从当前数开始
计算一下加上中位数后比它小的数的个数
最后,统计一下加了几个数
如果 大于/小于 了数字差的数量的一半 就想 小/大 的地方继续二分
这样求完。。。发现,,还是有点问题。。
的确,
中位数要么是一个数列中的值,
要么是两个数的平均值
所以,要求出两个中位数并且计算它们的平均值即可。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define ll long long#define MAX 2000100ll n;ll a[MAX];ll tot;ll ans;inline int read(){ register int x=0,t=1; register char ch=getchar(); while((ch>'9'||ch<'0')&&ch!='-')ch=getchar(); if(ch=='-'){t=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();} return x*t;}int main(){ n=read(); for(int i=1;i<=n;++i) a[i]=read(); sort(&a[1],&a[n+1]); tot=(ll)(n-1)*n/2; ll L=0,R=a[n]-a[1]; while(L<R)//二分找答案 { ll mid=(L+R)>>1; ll tt=0,pp=1; for(int i=1;i<=n;++i) { while(a[pp]<=a[i]+mid&&pp<=n)++pp; tt+=n-pp+1; } if(tt*2>tot)L=mid+1; else R=mid; } ans=R; L=0;R=a[n]-a[1]; while(L<R)//中位数可能是两个的平均数,所以要二分两次 { ll mid=(L+R)>>1; ll tt=0,pp=1; for(int i=1;i<=n;++i) { while(a[pp]<=a[i]+mid&&pp<=n)++pp; tt+=n-pp+1; } if(tt*2>=tot)L=mid+1; else R=mid; } cout<<((ans+R)>>1)<<endl; return 0;}
阅读全文
1 0
- 【洛谷T7153】(考试) 中位数
- 洛谷P1168 中位数(堆)
- 洛谷 中位数
- 洛谷P3031 [USACO11NOV](中位数,树状数组)
- 20161024的考试】noip模拟,dp,区间中位数,值域分块
- median of medians(中位数的中位数)
- BZOJ 1303-中位数图(中位数技巧)
- BFPRT(中位数的中位数)算法
- 【洛谷 1168】中位数
- |洛谷|堆|P1168 中位数
- 洛谷 P1168 中位数
- 洛谷 P1168 中位数
- 洛谷P1168 中位数
- 洛谷 1168 中位数
- 【洛谷】P1627 中位数
- 洛谷P1168 中位数
- 【枚举】中位数(median)
- POJ 2388(中位数)
- 大数据推荐系统算法之基于内容个性化推荐
- Java经典算法40例(十六)
- word2vec 构建中文词向量
- VS2015动态库编程之导出C++类(下)
- 随笔一篇
- 【洛谷T7153】(考试) 中位数
- Ubantu下bilibili开源ffmpeg编译
- 深浅拷贝浅解
- mysql之事务详解
- 校验下载的CentOS镜像是否完整
- Java经典算法40例(十七)
- mysql中case when用法与及注意事项
- 黑马商城项目(三)之二
- Java Reference源码分析