>Description
每门功课都耗费1单位时间来学习,从0时刻开始,有1000000000个单位时间。在任意时刻,都可以任意一门功课(编号1~n)来学习。
对于第i门功课,有一个截止时间Di,若学完这门功课,就能够获得知识Pi。
在给定的功课和截止时间下,能够获得的知识最多为多少呢?
>Input
第一行,一个整数n,表示功课的数目
接下来n行,每行两个整数,Di和Pi
>Output
输出一行一个整数,表示最多学得的知识数
>Sample Input
3
2 10
1 5
1 7
>Sample Output
17
数据范围限制
10% n<=25
60% n<10000
100% 1<=n<=100000,Di、Pi<=1000000000
>解题思路
先把数据按照截止时间从小到大排个序,枚举每条数据,看看在截至时间前还有没有空着的时间给他学习这个科目,如果有,就累计进答案;如果没有,就维护一个小根堆,看看堆顶的数是不是小于当前可以获得的价值,如果当前的价值更大,就把当前的价值代替堆顶。
>代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
struct subject
{
int d, p;
} a[100005];
int n, c, tt, ans, y, t[400005];
bool cmp (subject aa, subject bb) {
return aa.d