题目链接:

https://cn.vjudge.net/problem/POJ-3579

题目大意:

求的是一列数所有相互之间差值的序列的最中间的值是多少。

解题思路:

可以用二分套二分的方法求解第m大,和POJ-3685类似,这里的模板也差不多

枚举第m大x,判断小于等于x的数目是不是大于m,如果大于m说明x >= 第m大,调整区间r = mid - 1

不然l = mid + 1

此处是大于m而不是小于m是因为一个数可能出现多次,那么小于等于中间的数目可能就比m大

在计算小于等于x的数目的时候,用upperlower函数求解即可

一开始TLE是因为左右区间没选好,应该选给定的数字中的最大值减最小值作为右区间

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
const ll INF = 1e9 + ;
const int maxn = 1e6 + ;
ll a[maxn], n, m; ll ok(ll mid)
{
ll ans = ;
for(int i = ; i < n; i++)//此处不等于n是由于到了n没有比它更大的了,加上=也无妨
{
if(a[i] + mid >= a[n])//可以加速一点
{
ans += n - i;
continue;
}
int t = upper_bound(a + i, a + n + , a[i] + mid) - a;//这里用区间a+i而不是a+1可以加速求解
ans += t - - i;
}
return ans;
}
int main()
{
while(scanf("%lld", &n) != EOF)
{
for(int i = ; i <= n; i++)scanf("%lld", &a[i]);
sort(a + , a + n + );
m = n * (n - ) / ;
m = (m + ) / ;//求出第m个
ll l = , r = a[n] - a[], ans;
while(l <= r)
{
ll mid = (l + r) / ;
if(ok(mid) >= m)//小于等于mid的数字个数 >= m 说明mid>=最优解
{
ans = mid;
r = mid - ;
}
else l = mid + ;
}
printf("%lld\n", ans);
}
return ;
}

POJ-3579 Median---二分第k大(二分套二分)的更多相关文章

  1. 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)

    Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...

  2. POJ 3579 Median 二分加判断

    Median Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12453   Accepted: 4357 Descripti ...

  3. poj 3579 Median 二分套二分 或 二分加尺取

    Median Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5118   Accepted: 1641 Descriptio ...

  4. 51 NOD 1685 第K大区间2 二分+BIT

    题目描述: 定义一个长度为奇数的区间的值为其所包含的的元素的中位数. 现给出n个数,求将所有长度为奇数的区间的值排序后,第K大的值为多少. 样例解释: [l,r]表示区间的值 [1]:3 [2]:1 ...

  5. 51nod 第K大区间2(二分+树状数组)

    题目链接: 第K大区间2 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 定义一个长度为奇数的区间的值为其所包含的的元素的中位数.中位数_百度百科 现给出n个数,求将所有长度为 ...

  6. [51NOD1105]第k大的数(二分答案)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1105 先排序,二分上下界分别是最小的两个数和最大的两个数的乘积 ...

  7. ACM学习历程—51NOD 1685 第K大区间2(二分 && 树状数组 && 中位数)

    http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...

  8. 1105 第K大的数(二分)

    1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * B[0],A[0 ...

  9. ZOJ 1112 Dynamic Rankings【动态区间第K大,整体二分】

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1112 题意: 求动态区间第K大. 分析: 把修改操作看成删除与增加 ...

  10. POJ 2104 && POJ 2761 (静态区间第k大,主席树)

    查询区间第K大,而且没有修改. 使用划分树是可以做的. 作为主席树的入门题,感觉太神奇了,Orz /* *********************************************** ...

随机推荐

  1. Shiro登录的故事

    从前,有一个subject,他有一个UsernamePasswordToken的实例,也就是token: 他准备登录,于是调用subject.login(AuthenticationToken tok ...

  2. android点击桌面App图标activity启动流程

    1.点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求:2.system_server进程接收到请求后,向zygote进 ...

  3. python 爬虫系列04-电影天堂连接爬虫

    学习的第四个爬虫 from lxml import etree import requests BASE_D = 'http://www.dytt8.net' headers = { 'User-Ag ...

  4. Json化数据-调微信接口

    // 先获取用户openid列表 List<String> openids = wxPhotoUpload.getUserOpenIdList(access_token); TreeMap ...

  5. Rabbitmq~对Vhost的配置

    rabbitmq里有一些概念我们要清楚,如vhost,channel,exchange,queue等,而前段时间在部署rabbitmq环境时启用了虚拟主机vhost,感觉他主要是起到了消息隔离的作用, ...

  6. TOJ 4002 Palindrome Generator

    描述 A palindrome is a number that reads the same whether you read it from left to right or from right ...

  7. 内行看门道:看似“佛系”的《QQ炫舞手游》,背后的音频技术一点都不简单

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 3月14日,腾讯旗下知名手游<QQ炫舞>正式上线各大应用商店,并迅速登上App Store免 ...

  8. 【ubuntu】给新装好的UBUNTU系统配置静态IP

    最近在自己装有win7系统的thinkpad电脑上,给安装了Ubuntu16.04双系统. 想在ubuntu下配置一个hadoop伪分布式,最首要的就是要给系统配置一个静态IP . 一开始我按照网上的 ...

  9. POST 还是 GET?

    POST 还是 GET? 浏览器使用 method 属性设置的方法将表单中的数据传送给服务器进行处理.共有两种方法:POST 方法和 GET 方法. 如果采用 POST 方法,浏览器将会按照下面两步来 ...

  10. linq之Capacity(转载)

    出处:博客园 作者:mumuliang 连接:http://www.cnblogs.com/mumuliang/p/3914425.html Capacity 在.NET中List的容量应该只是受到硬 ...