2011-05-29 13:00:15 #include<iostream> #include<queue> #include<algorithm> #define N 200010 using namespace std; struct Work { int s, t; bool operator < (Work w) { return s<w.s; } } work[N]; int main() { priority_queue<int,vector<int>,greater<int> > pq; int i,n; __int64 ans=0,d,tmp,s; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d%d",&work[i].s,&work[i].t); if(n>1) { sort(work,work+n); for(i=0;i<n-1;i++) { d=work[i+1].s-work[i].s; s=work[i].s; pq.push(work[i].t); while(!pq.empty()) { tmp=pq.top(); pq.pop(); if(d>=tmp) { ans+=s+=tmp; d-=tmp; } else { tmp-=d; pq.push(tmp); break; } } } pq.push(work[i].t); s=work[i].s; while(!pq.empty()) {ans+=s+=pq.top();pq.pop(); } } else ans=work[0].s+work[0].t; printf("%I64d/n",ans); return 0; }