POJ 3579 二分答案
POJ 3579 二分答案
文章目录
- POJ 3579 二分答案
- 题目
- 思路
- 代码
题目
思路
排序,二分一下答案,然后对于每一个元素看一看加上这个答案tmp之后,在数列里面排在哪里,比a[i]+tmp大的数字和a[i]的差值肯定比tmp大,统计一下就行
一开始用lower_bound统计,但是还需要考虑等于的关系,如果涉及麻烦的可以换思路用upper_bound统计,然后还有一个地方就是一半是n * (n-1) / 4 不是除以2
细节方面有很多地方有问题,要严谨
代码
#include <iostream>
#include <cstdio>
#include <set>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <string>
#include <sstream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <fstream>
#include <iomanip>
//#include <unordered_map>
using namespace std;
#define dbg(x) cerr << #x " = " << x << endl;
typedef pair<int, int> P;
typedef long long ll;
#define FIN freopen("in.txt", "r", stdin);ll n;
const int MAXN = 1e5+ 5;
ll a[MAXN];ll judge(ll mid)
{ll cnt = 0;for(int i = 0; i < n; i++){ll tmp = a[i] + mid;int pos = upper_bound(a, a+n, tmp) - a;cnt += n - pos;}//dbg(cnt);return cnt > n*(n - 1) / 4;}
int main()
{//FIN;ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);while(~scanf("%d", &n)){ll maxx = -1;for(int i = 0; i < n; i++){scanf("%lld", &a[i]);}sort(a, a+n);ll l = 0, r = a[n-1] - a[0];while(l < r){ll mid = (l + r) >> 1;//dbg(mid);if(judge(mid)){l = mid + 1;}else{r = mid;}} printf("%lld\n", l);}
}
POJ 3579 二分答案相关推荐
- POJ 3579 二分
题意 传送门 POJ 3579 先处理掉绝对值.对数列升序排序,则绝对值可化为 Xi−Xj,j<iX_{i}-X_{j},j<iXi−Xj,j<i 根据等差数列求和公式,对于偶数 ...
- poj 1743 二分答案+后缀数组 求不重叠的最长重复子串
题意:给出一串序列,求最长的theme长度 (theme:完全重叠的子序列,如1 2 3和1 2 3 or 子序列中每个元素对应的差相等,如1 2 3和7 8 9) 要是没有差相等这个条件那就好办 ...
- poj 1064 java_poj 1064(二分答案)
题意: 有N条绳子,长度分别为 length[1,2,3,........,N]. 如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长有多长? 结果保留两位小数. 题解: 二分可能的长度. AC ...
- POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)
$ POJ~2018~Best~Cow~ Fences $(二分答案构造新权值) $ solution: $ 题目大意: 给定正整数数列 $ A $ ,求一个平均数最大的长度不小于 $ L $ 的子段 ...
- poj 3258 River Hopscotch 二分答案
题目地址: http://poj.org/problem?id=3258 题目思路: 首先,如果只减少一部,那么一定要干掉最短的那段距离(一旦不消灭,最小的还是它,并没有达到使最小值取最大的理想情况) ...
- POJ 1064 Cable master (二分答案)
题目链接:http://poj.org/problem?id=1064 有n条绳子,长度分别是Li.问你要是从中切出m条长度相同的绳子,问你这m条绳子每条最长是多少. 二分答案,尤其注意精度问题.我觉 ...
- (POJ - 3579)Median(二分)
中文题意:现在有N个神秘的数字(A1,A2,A3-.An),我们需要从这串数字中得到一个密码. 得到密码的方式为: 先计算每个数字之间的差:|Ai-Aj|(1<=i<j<=N),最后 ...
- POJ - 2018 二分+单调子段和
依然是学习分析方法的一道题 求一个长度为n的序列中的一个平均值最大且长度不小于L的子段,输出最大平均值 最值问题可二分,从而转变为判定性问题:是否存在长度大于等于L且平均值大于等于mid的字段和 每个 ...
- POJ2018-Best Cow Fences【实数二分答案】
正题 题目链接:http://poj.org/problem?id=2018 大意 有n个数,一段长度不小于L的子段,使他们的平均值最大. 解题思路 二分答案,然后一遍暴力用最大子段和的方法求出是否可 ...
最新文章
- AB1601之iic驱动改造
- 为了支持AOP的编程模式,我为.NET Core写了一个轻量级的Interception框架[开源]
- linux svn可视化工具,CentOS6.5安装SVN 可视化管理工具iF.SVNAdmin
- 解决摹客iDoc插件在Sketch中无法正常使用,切图和标注尺寸不一致的问题
- 放弃用了7年的MyBatis !我选择 JDBCTemplate!
- 智慧交通之智能红绿灯调控系统分析
- 通过Modbus转EtherNetIP网关连接AB PLC的配置案例
- 小工具 | 横断面面积及土方量计算excel表格
- ESP8266-Arduino编程实例-L3GD20三轴角速率传感器驱动
- echarts常见图形-横向柱状图(六)
- 7-14 设计一个风扇Fan类 (20 分)
- 使用了3年多的华硕笔记本电脑fl5900uq7500电脑感受-提示已接通电源、正在放电抓狂问题
- linux系统如何扩展屏幕,大神教你用 autoplank 在多个显示器上使用 Plank 扩展坞
- 微信小程序开发入门教程(十二)
- git tag怎么使用_这才是真正的 Git:Git 内部原理揭秘!
- 【PyG2Plot】来试一下蚂蚁开源的图表库PyG2Plot效果如何~~
- 计算机芯片的主要用途,汽车电脑芯片30343的主要作用是什么??
- 思泰克在创业板过会:拟募资4亿元,赛富投资、传音控股等为股东
- mmap/munmap函数详解
- vivox21android版本9升级,vivo X21 UD升级安卓9无限重启怎么办?解决方法