HDU6180

来源:互联网 发布:蔡康永 知乎 编辑:程序博客网 时间:2024/06/05 11:15

排序完后,贪心的选择当前开始时间在前面结束时间离的最近的。

#include <bits/stdc++.h>using namespace std;typedef long long ll;namespace fastIO {    #define BUF_SIZE 1000000    //fread -> read    bool IOerror = 0;    inline char nc() {        static char buf[BUF_SIZE], *p1 = buf + BUF_SIZE, *pend = buf + BUF_SIZE;        if(p1 == pend) {            p1 = buf;            pend = buf + fread(buf, 1, BUF_SIZE, stdin);            if(pend == p1) {                IOerror = 1;                return -1;            }        }        return *p1++;    }    inline bool blank(char ch) {        return ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t';    }    inline void read(int &x) {        char ch;        while(blank(ch = nc()));        if(IOerror)            return;        for(x = ch - '0'; (ch = nc()) >= '0' && ch <= '9'; x = x * 10 + ch - '0');    }    #undef BUF_SIZE};using namespace fastIO;const int N = 1E5 + 7;typedef pair<int, int> P;P a[N];multiset<int> f;int main(){   // ptr();    int T;    read(T);    while(T --) {        int n;        read(n);        f.clear();        for(int i = 1;i <= n;i ++) {            read(a[i].first);            read(a[i].second);        }        sort(a + 1, a + 1 + n);        ll ans = 0;        for(int i = 1;i <= n;i ++) {            auto it = f.upper_bound(a[i].first);            if(it == f.begin()) {                ans += a[i].second - a[i].first;                f.insert(a[i].second);            } else {                it --;                ans += a[i].second - *it;                f.erase(it);                f.insert(a[i].second);            }        }        printf("%d %lld\n",f.size(), ans);    }    return 0;}


原创粉丝点击