Median [二分]
来源:互联网 发布:ubuntu u盘挂载 编辑:程序博客网 时间:2024/06/05 04:51
题意:对于给定的n个数字数列,求
思路:首先计算中位数前应该有多少个数字,二分新序列的值,看满足小于等于他的差值有多少个。
二分的单调性:把新序列看做一个有序序列,本身具有单调性,二分上面的值。
二分的check(mid):对于当前差值x,枚举第一个数字找到第一个比它大的值,就可以统计一共有多少个差值小于等于x,看x与需要的个数的关系,就可以返回check值更新二分端点。
复杂度O(nlognlogn),cin关闭同步TLE了。
#include<iostream>#include<string>#include<cstdio>#include<cstring>#include<bitset>#include<algorithm>#include<map>#include<set>#include<queue>#include<vector>#include<cstdlib>#include<list>#include<stack>#include<cmath>#include<iomanip>using namespace std;//#pragma comment(linker, "/STACK:1024000000,1024000000")typedef long long LL;void debug() {cout << "ok running!" << endl;}int n, m;int a[100005];bool check(int x){ int cnt = 0; for(int i=0; i<n; i++){ cnt += (upper_bound(a+i, a+n, a[i]+x)-1 - (a+i)); } if(cnt >= m) return 1; else return 0;}int main(){ //ios::sync_with_stdio(false); #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); #endif // ONLINE_JUDGE while(~scanf("%d", &n)) { int temp = n*(n-1)/2; if(temp%2 == 0) m = c/2; else m = temp/2 + 1; for(int i=0; i<n; i++) scanf("%d", &a[i]); sort(a, a+n); int l = -1, r = a[n-1] - a[0]; int ans = -1; while(l <= r) { int mid = (l+r)>>1; if(check(mid)) { r = mid -1; ans = mid; } else l = mid + 1; } printf("%d\n", ans); } return 0;}
阅读全文
0 0
- Median [二分]
- ZOJ 3612 Median(二分)
- Median - POJ 3579 二分
- Median(vector+二分)
- POJ - 3579 Median 二分
- POJ3579 Median(二分查找)
- POJ 3679 Median 【二分】
- poj3579 Median 二分
- POJ3579:Median(二分)
- POJ 3579 Median(二分)
- POJ3579--Median(二分)
- POJ 3579 - Median(二分搜索)
- POJ3579 Median —— 二分
- POJ 3579 Median 查找中间值 二分
- ZOJ 3612 Median multiset或vector+二分
- poj 3579 Median 二分查找与lower_bound
- POJ3784---Running Median(树状数组+二分)
- POJ 3579 Median (二分搜索)
- [简单逻辑学]学习逻辑学的思想准备——真相
- ubuntu下安装arm-linux-gcc交叉编译环境
- JSP中的pagaEncoding和contentType中charset的区别
- Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(五)配置 Axios api 接口调用文件
- 初学Nginx(一)监听两个端口,实现转发
- Median [二分]
- 考研数据结构复习之线性表
- 常见的几种RuntimeException
- Oracle exp/imp导入不同的表空间
- java 数据结构与排序
- .net多线程学习
- Socket编程中select函数用法详解(转)
- charles(windows64位) 抓包工具安装及详解
- 柔性数组