zoukankan      html  css  js  c++  java
  • 1029 Median (二分)

    link

    int getint(){
        int res=0;
        char c=getchar();
        while(!(c>='0' && c<='9')) c=getchar();
        while(c>='0' && c<='9'){
            res=res*10+(c-'0');
            c=getchar();
        }
        return res;
    }
    
    int helper(vector<int>& num1, vector<int>& num2){
        int len1=num1.size();
        int len2=num2.size();
        int halflen=(len1+len2+1)/2;
        int left=0;
        int right=len1;
        while(left<=right){
            int mid=left+(right-left)/2;
            int n1=mid;
            int n2=halflen-mid;
            int leftmax1=(n1==0)?INT_MIN:num1[n1-1];
            int rightmin1=(n1==len1)?INT_MAX:num1[n1];
            int leftmax2=(n2==0)?INT_MIN:num2[n2-1];
            int rightmin2=(n2==len2)?INT_MAX:num2[n2];
            if(leftmax1<=rightmin2 && leftmax2<=rightmin1){
                return max(leftmax1,leftmax2);
            }
            if(leftmax1>rightmin2){
                right=mid-1;
            }else{
                left=mid+1;
            }
        }
        return -1;
    }
    
    int main(){
        int n1=getint();
    
        vector<int> num1(n1);
        for(int i=0;i<n1;i++){
            num1[i]=getint();
        }
        int n2=getint();
        vector<int> num2(n2);
        for(int i=0;i<n2;i++){
            num2[i]=getint();
        }
        int res=0;
        if(n1<=n2){
            res=helper(num1,num2);
        }else{
            res=helper(num2,num1);
        }
        printf("%d", res);
        return 0;
    }
  • 相关阅读:
    大富翁8分析
    DCOM实现分布式应用(三)
    DCOM实现分布式应用(一)
    [转]职业生涯中的10个致命错误
    VC中展开宏
    zoj 2853 Evolution
    poj 1088 滑雪
    hdu 2437 Jerboas
    poj 3070 Fibonacci
    zoj 2976 Light Bulbs
  • 原文地址:https://www.cnblogs.com/FEIIEF/p/12854632.html
Copyright © 2011-2022 走看看