简单模拟题
考虑到每结束一个人都会直接从剩下的人里挑操行分最高的一个
所以我们用一个优先队列按操行分存一下
将来的时间排下序模拟一下就可以了,注意细节和分类讨论
#includeusing namespace std;#define int long longinline int read(){ char ch=getchar(); int res=0,f=1; while(!isdigit(ch))ch=getchar(); while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48),ch=getchar(); return res;}const int N=100005;struct wat{ int l,pos,t;}a[N];inline bool operator > (const wat &a,const wat &b){ return a.pos b.pos; return a.l ,greater > q;int n,now,ans;signed main(){ n=read(); for(int i=1;i<=n;i++){ a[i].l=read(),a[i].t=read(),a[i].pos=n-i+1; } sort(a+1,a+n+1,comp); for(int i=1;i<=n;i++){ if(a[i].l now)now=a[i].l+a[i].t; else q.push(a[i]); } } cout<