http://www.lydsy.com/JudgeOnline/problem.php?id=1029
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string.h>
#include <queue>
#include <vector>
#include <algorithm>
#include <cassert>
#include <set>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<(b);++i)
#define rrep(i,a,b) for(int i=(a);i>=(b);--i)
#define clr(a,x) memset(a,(x),sizeof(a));
#define eps 1e-8
#define LL long long
const int maxn=150000+5;
int n;
int ans;
struct Task
{
LL deadline;
LL cost;
Task(LL cost=0,LL deadline=0)
:cost(cost),deadline(deadline) {}
bool operator<(const Task&tk) const
{
return deadline<tk.deadline;
}
}task[maxn];
int main()
{
while(scanf("%d",&n)==1) {
rep(i,0,n) scanf("%lld%lld",&task[i].cost,&task[i].deadline);
sort(task,task+n);
LL t=0; priority_queue<LL> q;
rep(i,0,n) {
if (t+task[i].cost<=task[i].deadline) { q.push(task[i].cost); t += task[i].cost; }
else if (q.size()&&q.top()>task[i].cost) {
t -= q.top(); t += task[i].cost;
q.pop(); q.push(task[i].cost);
}
}
printf("%d\n",q.size());
}
}