和poj3685类似,都是二分答案然后在判断时再二分

这题的内层二分可以用stl代替

/*
二分套二分,思路:升序排序数据,先二分答案x进行判断,判断时枚举每个元素,二分找到和其之差小于等于x的所有值,累加(这个二分可以直接用lower_Bound代替)
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define maxn 100005
#define INF 1000000000
#define ll long long using namespace std; ll n,m,a[maxn]; long long func(ll x){//统计小于等于x的差的个数
ll res=;
for(int i=;i<=n;i++)
res+=upper_bound(a+,a++n,a[i]+x)-a-i-;
return res;
} int main(){
while(scanf("%d",&n)==){
for(int i=;i<=n;i++) scanf("%lld",&a[i]);
sort(a+,a++n);
m=n*(n-)/;
m+=(n*(n-)/)%!=;//寻找第m大的差
ll l=,r=a[n],mid,ans;
while(l<=r){
mid=l+r>>;
if(func(mid)<m)//小于等于mid的差小于m个
l=mid+;
else
ans=mid,r=mid-;
}
printf("%lld\n",ans);
}
}
/*
二分套二分,思路:升序排序数据,先二分答案x进行判断,判断时枚举每个元素,二分找到和其之差小于等于x的所有值,累加(这个二分可以直接用lower_Bound代替)
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define maxn 100005
#define INF 1000000000
#define ll long long using namespace std; ll n,m,a[maxn]; long long func(ll x){//统计小于等于x的差的个数
ll res=;
for(int i=;i<=n;i++)
res+=upper_bound(a+,a++n,a[i]+x)-a-i-;
return res;
} int main(){
while(scanf("%d",&n)==){
for(int i=;i<=n;i++) scanf("%lld",&a[i]);
sort(a+,a++n);
m=n*(n-)/;
m+=(n*(n-)/)%!=;//寻找第m大的差
ll l=,r=a[n],mid,ans;
while(l<=r){
mid=l+r>>;
if(func(mid)<m)//小于等于mid的差小于m个
l=mid+;
else
ans=mid,r=mid-;
}
printf("%lld\n",ans);
}
}

poj3579 二分套二分的更多相关文章

  1. POJ-3579 Median---二分第k大(二分套二分)

    题目链接: https://cn.vjudge.net/problem/POJ-3579 题目大意: 求的是一列数所有相互之间差值的序列的最中间的值是多少. 解题思路: 可以用二分套二分的方法求解第m ...

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

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

  3. poj 3685 Matrix 二分套二分 经典题型

    Matrix Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 5724   Accepted: 1606 Descriptio ...

  4. 二分套二分 hrbeu.acm.1211Kth Largest

    Kth Largest TimeLimit: 1 Second   MemoryLimit: 32 Megabyte Description There are two sequences A and ...

  5. poj3685 二分套二分

    F - 二分二分 Crawling in process... Crawling failed Time Limit:6000MS     Memory Limit:65536KB     64bit ...

  6. Matrix [POJ3685] [二分套二分]

    Description 有一个N阶方阵 第i行,j列的值Aij =i2 + 100000 × i + j2 - 100000 × j + i × j,需要找出这个方阵的第M小值. Input 第一行输 ...

  7. 51nod 1105(第K大数 二分套二分)

    题目链接:http://www.51nod.com/onlineJudge/submitDetail.html#!judgeId=620811 参考自:https://blog.csdn.net/f_ ...

  8. POJ 3685 Matrix (二分套二分)

    Matrix Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 8674   Accepted: 2634 Descriptio ...

  9. Gym 101064 D Black Hills golden jewels 【二分套二分/给定一个序列,从序列中任意取两个数形成一个和,两个数不可相同,要求求出第k小的组合】

    D. Black Hills golden jewels time limit per test 2 seconds memory limit per test 256 megabytes input ...

随机推荐

  1. 使用htpasswd实现Nginx验证访问

    Nginx是一个高性能的WEB服务器,越来越多的用户使用,如果您的某个站点不希望对外公开(比如PHPMyAdmin),可以使用htpasswd实现Nginx验证访问. 安装htpasswd htpas ...

  2. ElasticSearch 例子

    ElasticSearch是一个接近实时的搜索平台,它利用Lucese进行文档索引. 本文会写个可以运行的简单例子,方便大家上手,日后深入了解. 需要引入maven依赖 <dependency& ...

  3. 怎么简单高效破解MyEclipse10、获取注册码

    亲测有效 附上地址:https://www.cnblogs.com/caohuimingfa/p/6659902.html

  4. CM记录-优化配置解决Reduce卡顿问题

    CDH大数据集群问题问题分析与解决方案 问题描述:Hive提交任务,一直卡在Reduce阶段,进度缓慢. 日志分析:NodeManager节点产生的usercache所在分区空间不足,导致进程异常退出 ...

  5. Windows环境墙内搭建Go语言集成开发环境

    1 安装go环境 太简单略 2 安装vs code 找到微软的官方网站,下载Visual Studio Code,官网地址https://code.visualstudio.com/ 安装完成后进入V ...

  6. B+树,B树,聚集索引,非聚集索引

    简介: B+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有 B+树索引可以分为聚集索引和非聚集索引 mysql使用B+树,其中Myisam是非聚集索引,innoDB是聚集索引 聚簇索引索 ...

  7. 常用关于Android活动的实践技巧

    //知晓当前是在哪一个活动 /* 新建一个BaseActivity类(Java class), 继承自AppCompatActivity * 重写 onCreate()方法,已有的活动无需再继承自Ap ...

  8. JavaScript 无刷新修改浏览器URL地址栏

    //发现地址栏已改为:newUrlvar stateObject = {}; var title = "Wow Title"; var newUrl = "/my/awe ...

  9. oracle锁表

    一.锁表的处理 Oracle锁表比较简单,查询锁表的session杀掉就可以了. 1.以下几个为相关表 SELECT * FROM V$LOCK; SELECT * FROM V$SQLAREA; S ...

  10. 变量,id()

    >>> a = 1 >>> print id(a) 2870961640 >>> b = a >>> print id(b) 2 ...