zoukankan      html  css  js  c++  java
  • poj3579 二分套二分

    和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=0;
        for(int i=1;i<=n;i++)
            res+=upper_bound(a+1,a+1+n,a[i]+x)-a-i-1;
        return res; 
    }
    
    int main(){
        while(scanf("%d",&n)==1){
            for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
            sort(a+1,a+1+n);
            m=n*(n-1)/4;
            m+=(n*(n-1)/2)%2!=0;//寻找第m大的差 
            ll l=0,r=a[n],mid,ans;
            while(l<=r){
                mid=l+r>>1;
                if(func(mid)<m)//小于等于mid的差小于m个
                    l=mid+1;
                else 
                    ans=mid,r=mid-1; 
            }
            printf("%lld
    ",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=0;
        for(int i=1;i<=n;i++)
            res+=upper_bound(a+1,a+1+n,a[i]+x)-a-i-1;
        return res; 
    }
    
    int main(){
        while(scanf("%d",&n)==1){
            for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
            sort(a+1,a+1+n);
            m=n*(n-1)/4;
            m+=(n*(n-1)/2)%2!=0;//寻找第m大的差 
            ll l=0,r=a[n],mid,ans;
            while(l<=r){
                mid=l+r>>1;
                if(func(mid)<m)//小于等于mid的差小于m个
                    l=mid+1;
                else 
                    ans=mid,r=mid-1; 
            }
            printf("%lld
    ",ans);
        }
    }
  • 相关阅读:
    前端网站汇总
    更换Sublime Text主题字体
    免费收录网站搜索引擎登录口
    IE6,7,8支持css圆角
    CSS继承—深入剖析
    JavaScript正则表达式大全
    CSS伪元素选择器
    line-height用法总结
    判断腾讯QQ是否在线
    text-overflow使用文字超多div的宽度或超过在table中<td>
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10142779.html
Copyright © 2011-2022 走看看