2016夏季练习——二分
2016-07-15 14:19
351 查看
来源:POJ3579
两次二分
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN = 100000+10;
int n;
int a[MAXN];
bool judge(int m){
int cnt=0;
for(int i=0;i<n;++i){
cnt+=n-(lower_bound(a,a+n,a[i]+m)-a);
}
//cout<<"infun: "<<cnt<<endl;
if(cnt>(n-1)*n/4) return 1;
else return 0;
}
int main(){
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",a+i);
}
//cout<<"des: "<<n*(n-1)/4<<endl;
sort(a,a+n);
int left=0;
int right=a[n-1]-a[0];
int mid,ans;
while(left<=right){
mid=(left+right)/2;
//cout<<"pro: "<<left<<" "<<mid<<" "<<right<<endl;
if(judge(mid)){
left = mid+1;
ans=mid;
}
else{
right=mid-1;
}
}
//cout<<left<<endl;
//cout<<mid<<endl;
cout<<right<<endl;
//cout<<ans<<endl;
}
return 0;
}
两次二分
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN = 100000+10;
int n;
int a[MAXN];
bool judge(int m){
int cnt=0;
for(int i=0;i<n;++i){
cnt+=n-(lower_bound(a,a+n,a[i]+m)-a);
}
//cout<<"infun: "<<cnt<<endl;
if(cnt>(n-1)*n/4) return 1;
else return 0;
}
int main(){
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",a+i);
}
//cout<<"des: "<<n*(n-1)/4<<endl;
sort(a,a+n);
int left=0;
int right=a[n-1]-a[0];
int mid,ans;
while(left<=right){
mid=(left+right)/2;
//cout<<"pro: "<<left<<" "<<mid<<" "<<right<<endl;
if(judge(mid)){
left = mid+1;
ans=mid;
}
else{
right=mid-1;
}
}
//cout<<left<<endl;
//cout<<mid<<endl;
cout<<right<<endl;
//cout<<ans<<endl;
}
return 0;
}
相关文章推荐
- MyBatis基于Maven的入门
- [maven(1)]myeclipse2014下如何配置maven
- Java中throw和throws的区别
- Spring基础——在Spring Config 文件中配置 Bean
- 两个VLC实现播放串流测试 (转)
- java去处重复输出
- JqGrid有关操作 方法列表
- oracle 删除(所有)约束 禁用(所有)约束 启用(所有)约束
- 聊聊并发(四)深入分析ConcurrentHashMap
- VB程序学习代码记录20160715
- Java虚拟机详解----JVM常见问题总结
- Android自定义可循环的滚动选择器CycleWheelView
- 应用程序ICON下面app名字国际化
- 修改swap大小的两种方法
- loadrunner 当有用户登录失败时,重新执行登录脚本
- JAVA设计模式---观察者模式
- MAC svn 部署
- Visual Studio 2013 常用快捷键
- 构建高并发高可用的电商平台架构实践
- 程序运行时会出现 xxxx.exe 中的 0x00fa1c29 处有未经处理的异常: 0xC00000FD: Stack overflow