HDU6180——Schedule

Problem

There are N schedules, the i-th schedule has start time si and end time ei (1 <= i <= N). There are some machines. Each two overlapping schedules cannot be performed in the same machine. For each machine the working time is defined as the difference between time_end and time_start , where time_end is time to turn off the machine and time_start is time to turn on the machine. We assume that the machine cannot be turned off between the time_start and the time_end.
Print the minimum number K of the machines for performing all schedules, and when only uses K machines, print the minimum sum of all working times.

Input

The first line contains an integer T (1 <= T <= 100), the number of test cases. Each case begins with a line containing one integer N (0 < N <= 100000). Each of the next N lines contains two integers si and ei (0<=si

Output

For each test case, print the minimum possible number of machines and the minimum sum of all working times.

Sample Input

1
3
1 3
4 6
2 5

Sample Output

2 8


思路

贪心。对任务按开始时间排序。选择结束时间小于且最接近当前任务开始时间的机器完成当前任务,如果找不到,就新开一个机器来完成当前任务。需要用到STL中的multiset。

代码

#include 
#include 
#include 
using namespace std;
const int N=1e5+5;
struct Node{
    int l,r;
    bool operator<(const Node &n)const{
        return ls;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t,n;
    cin>>t;
    while(t--){
        cin>>n;
        for(int i=0;i>a[i].l>>a[i].r;
        s.clear();
        sort(a,a+n);
        int tot=0;
        long long res=0;
        for(int i=0;i

你可能感兴趣的:(HDU6180——Schedule)