首先我们先按照报废时间排序,然后判断在鬼ID那个时间里能不能修好,如果修不好就炸掉
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <queue> #define maxn 250000 #define int long long #define rep(x,y,z) for(int x = y ; x <= z ;x ++) using namespace std ; int n ; struct dy{ int w , t ; int operator < (const dy &x) const { return t < x.t ; } }a[maxn] ; int tot , ans ; priority_queue<int>q ; signed main() { scanf("%lld",&n) ; rep(i,1,n) { scanf("%lld%lld",&a[i].w,&a[i].t) ; }sort(a+1,a+1+n) ; rep(i,1,n){ if(tot + a[i].w > a[i].t) { if(a[i].w < q.top()) { tot -= q.top() , q.pop() ; q.push(a[i].w) ; tot += a[i].w ; } }else { ans ++ ; q.push(a[i].w) ; tot += a[i].w ; } } cout << ans << endl ; return 0 ; }