题目链接:###
题目分析:###
大模拟,貌似(O(n^2))也可以卡常过,复杂度正确的做法是用优先队列维护。
代码:###
#include<bits/stdc++.h>
#define N (100000+5)
using namespace std;
struct node{
int a;int t;int num;
friend bool operator < (node a,node b){
return a.num>b.num;
}
}st[N];
priority_queue<node>q;
inline int read(){
int cnt=0,f=1;char c;
c=getchar();
while(!isdigit(c)){
if(c=='-') f=-f;
c=getchar();
}
while(isdigit(c)){
cnt=cnt*10+c-'0';
c=getchar();
}
return cnt*f;
}
int n,last,wait,ans;
bool cmp2(node a,node b){
return a.a<b.a;
}
int main(){
n=read();
for(register int i=1;i<=n;i++) {
st[i].a=read();st[i].t=read();
st[i].t+=st[i].a;st[i].num=i;
}
sort(st+1,st+n+1,cmp2);
last=st[1].t;
for(register int i=2;i<=n;i++) {
if(st[i].a>=last) {
if(q.empty()) last=st[i].t;
else{
wait=last-q.top().a;
ans=max(ans,wait);
last=wait+q.top().t;
q.pop();
if(last<st[i].a) --i;
else q.push(st[i]);
}
}
else q.push(st[i]);
}
while(!q.empty()){
wait=last-q.top().a;
ans=max(ans,wait);
last=q.top().t;
q.pop();
}
printf("%d
",ans);
return 0;
}