NC51031. 二分裸题
描述
输入描述
第一行两个整数n,m,接下来一行n个数,第个整数x表示第i个人的金币接下来m行每行两个整数表示每个房子的舒适度a和价格b,
输出描述
输出一个数表示最大可能的舒适度之和
示例1
输入:
2 2 2 2 2 2 2 2
输出:
4
C++ 解法, 执行用时: 136ms, 内存消耗: 1656K, 提交时间: 2022-07-20 15:09:40
#include<iostream> #include<algorithm> #include<queue> using namespace std; typedef long long int ll; int n,m; struct ra{ int a,b; bool operator<(const ra& W) const{ return b<W.b; } }f[200010]; int w[200010]; int main(){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>w[i]; for(int i=1;i<=m;i++){ int a,b; cin>>a>>b; f[i]={a,b}; } sort(w+1,w+1+n); sort(f+1,f+m+1); priority_queue<int> q; ll res=0; int j=1; for(int i=1;i<=n;i++){ while(j<=m&&f[j].b<=w[i]) q.push(f[j++].a); if(!q.empty()){ int t=q.top(); q.pop(); res+=t; } } cout<<res<<endl; }