zoukankan      html  css  js  c++  java
  • BZOJ4977: [[Lydsy1708月赛]跳伞求生

    传送门
    直接贪心
    考虑到 (n) 个人的贡献都是 (a_i),另外 (m) 个人的贡献都是 (c_i-b_i)
    首先 (a_i>b_j) 的限制不好做,所以将 (a,b) 从小到大排序
    枚举 (a_i) ,每次把小于 (a_i)(b) 加入优先队列,只要从中间选一个最大的匹配,之后将 (-a_i) 加入优先队列,表示可以反悔
    代码真的短

    # include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    const int maxn(1e5 + 5);
    
    int n, m, a[maxn], b[maxn], c[maxn];
    pair < int, int > w[maxn];
    ll ans;
    priority_queue <int> q;
    
    int main() {
    	int i, j;
    	scanf("%d%d", &n, &m);
    	for (i = 1; i <= n; ++i) scanf("%d", &a[i]);
    	for (i = 1; i <= m; ++i) scanf("%d%d", &b[i], &c[i]), w[i] = make_pair(b[i], c[i] - b[i]);
    	sort(a + 1, a + n + 1), sort(w + 1, w + m + 1);
    	for (i = 1, j = 1; i <= n; ++i) {
    		while (j <= m && w[j].first < a[i]) q.push(w[j++].second);
    		if (q.empty()) continue;
    		ans += a[i] + q.top(), q.pop(), q.push(-a[i]);
    	}
    	printf("%lld
    ", ans);
    	return 0;
    }
    
  • 相关阅读:
    第三周作业
    第二周作业
    第一周作业
    第三次作业
    第二次作业
    c语言最后一次作业
    第14、15教学周作业
    第七周作业
    第六周随笔
    第四周作业
  • 原文地址:https://www.cnblogs.com/cjoieryl/p/10287073.html
Copyright © 2011-2022 走看看