#include<bits/stdc++.h>
using namespace std;
int n,sum;
long long last;
struct pp{
long long t1,t2;
}b[2*100010];
bool cmp(pp a,pp b){return a.t2<b.t2;}
priority_queue<long long> q;
int main(){
scanf("%d",&n);
for(int i=1,tmp;i<=n;i++){
scanf("%lld%lld",&b[i].t1,&b[i].t2);
tmp=b[i].t2;
b[i].t2=b[i].t1+b[i].t2;
b[i].t1=tmp;
}
sort(b+1,b+1+n,cmp);
for(int i=1;i<=n;i++){
if(q.empty()&&b[i].t2-b[i].t1>=0){
q.push(b[i].t1);
sum++;
last=last+b[i].t1;
continue;
}
if(q.size()){
if(last>=b[i].t2-b[i].t1&&b[i].t1<q.top()){
last=last-q.top()+b[i].t1;
q.pop();
q.push(b[i].t1);
continue;
}
if(last<b[i].t2-b[i].t1){
last+=b[i].t1;
q.push(b[i].t1);
sum++;
}
}
}
printf("%d\n%lld",sum,last);
return 0;
}
样例不对(输出3,9)也能AC...
因为代码是P4053 改的
最后发现问题出在28行和34行上:将28行的大于等于改成大于,34行的改成小于等于,酱才能既过样例又AC