Codeforces Round #657 (Div. 2) C题

枚举bi,找到大于bi的所有ai

#include <bits/stdc++.h>//代码来源某位不知名大佬
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int t; cin >> t;
    while (t--) {
        ll n, m; cin >> n >> m;
        vector<pll> arr(m);
        for (int i = 0; i < m; ++i) cin >> arr[i].first >> arr[i].second;
        sort(arr.begin(), arr.end());
        vector<ll> front(m + 1), prefix(m + 1);
        for (int i = 0; i < m; ++i) {
            front[i + 1] = arr[i].first;
            prefix[i + 1] = prefix[i] + arr[i].first;
        }
        ll ans = 0;
        for (int i = 0; i < m; ++i) {
            int ind = upper_bound(front.begin(), front.end(), arr[i].second) - front.begin() - 1;
            ind = max(ind, (int)(m - n + 1));
            ll res = prefix.back() - prefix[ind];
            ll rem = n - (m - ind);
            res += (i >= ind? arr[i].second * rem: arr[i].first + arr[i].second * (rem - 1));
            ans = max(ans, res);
        }
        ans = max(ans, prefix.back() - prefix[max(0LL, m - n)]);
        cout << ans << '\n';
    }
    return 0;
}

链接: Codeforces Round #657 (Div. 2) C题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值