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);
        }
    }
  • 相关阅读:
    如何保存PDF、Word和Excel文件到数据库中
    C#添加PDF页眉——添加文本、图片到页眉
    C#数组,List,Dictionary的相互转换
    C#向PPT文档插入图片以及导出图片
    【CTSC2018】暴力写挂(边分治,虚树)
    【WC2018】通道(边分治,虚树,动态规划)
    【BZOJ2870】最长道路(边分治)
    【WC2018】州区划分(FWT,动态规划)
    【LOJ#6029】市场(线段树)
    【Hihocoder1413】Rikka with String(后缀自动机)
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10142779.html
Copyright © 2011-2022 走看看