zoukankan      html  css  js  c++  java
  • 已知一个序列A1.A2….An,给你一个整数K,找到满足所有Ai+Aj>=k的数对(i,j)的个数

    #include<bits/stdc++.h>
    
    using namespace std;
    #define ll long long
    #define maxn 100010
    /*
    已知一个序列A1.A2….An,给你一个整数K,找到满足所有Ai+Aj>=k的数对(i,j)的个数
    */
    int main()
    {
        int n,a[105],k,low,upp;
    
        while(cin >> n >> k){
            int ans1 = 0, ans2 = 0;
    
            for(int i=0; i<n; i++)
                cin >> a[i];
            sort(a,a+n);
            //ans1 = lower_bound(a,a+n,k)-a;
            //ans2 = upper_bound(a,a+n,k)-a;
    
            for(int i=0; i<n; i++){
                ans1 += n - (lower_bound(a+i+1,a+n,k-a[i]) - a);/*
                转化为A[j]>=k-A[i],在A[i]~A[n]中二分查找大于等于k-A[i]的第一个元素A[j],
                到数组末尾的所有元素都是所求解,累加起来即可。*/
                ans2 += n - (upper_bound(a+i+1,a+n,k-a[i]) - a);//(>)
            }   
            /*
            for(int i=0; i<n; i++){
                ans1 = lower_bound(a+i+1,a+n,k) - a;//找出这个数出现的第一个位置
                ans2 = upper_bound(a+i+1,a+n,k) - a;//找出这个数出现的最后一个位置的后一个位置
            }*/
            printf("%d %d
    ",ans1,ans2);
        }
        return 0;
    }
    二分
  • 相关阅读:
    阅读笔记十四
    惨淡的蓝桥杯国赛经历
    阅读笔记十三
    阅读笔记十二
    阅读笔记十一
    阅读笔记十
    阅读笔记九
    阅读笔记八
    阅读笔记七
    阅读笔记六
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8876649.html
Copyright © 2011-2022 走看看