zoukankan      html  css  js  c++  java
  • 二元数组的最小值最大和

    题意: 给你一个二元组(a1,b1)(a[2],b[2]).......(a[n],b[n]),让你从这n个二元组中选出K个,使得a[i] ,b[i]的最小值的和最大

     n<=1e5+5;a[i],b[i]<=1e9;

    思路:排序加优先队列

    首先对a[i]进行从大到小排序,然后遍历数组 a 数组,很明显依次遍历过来取得a[i]一定是最小值的最大,但如何保证b[i]的最小值最大呢,可以用优先队列(较小者先出),当队列大小为k时,我们弹出一个最小值,同时更新答案,并将其删除。因为每次都会更新答案,所以你再加入进来的b[i]无论大小如何,都有可能进行答案的更新。

    #include<bits/stdc++.h>
    #define ll long long
    #define pii pair<int,int>
    #define mem(a,b) memset(a,b,sizeof(a))
    using namespace std;
    const int maxn=1e5+5;
    const int inf=1e9+7;
    
    pii a[maxn];
    bool cmp(pii A,pii B){if(A.first==B.first)return A.second>B.second;else return A.first>B.first;}
    priority_queue<int,vector<int>,greater<int> >q;
    int main()
    {
        int n,k;
        cin>>n>>k;
        for(int i=1;i<=n;i++){
            scanf("%d%d",&a[i].first,&a[i].second);
        }
        sort(a+1,a+1+n,cmp);
        int ans=0;
        for(int i=1;i<=n;i++){
            q.push(a[i].second);
            if(q.size()==k){
                ans=max(ans,q.top()+a[i].first);
                q.pop();
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    纵使单枪匹马,也要勇闯天涯
  • 相关阅读:
    Json Web Token
    logstash 收集 IIS 日志实践
    Lucene Query In Kibana
    autofac 在.net core 与经典asp.net中的差异
    .net core 集成 autofac.
    向量化
    神经网络学习1
    漏斗限流
    正则化(Regularization)
    简单限流
  • 原文地址:https://www.cnblogs.com/sj-gank/p/12149421.html
Copyright © 2011-2022 走看看