RT,WA
#include<bits/stdc++.h>
using namespace std;
int n,xgd[20003],tl,ans,xnm;
struct good{
int w,t;
}a[10001];
inline bool cmp(const good&x,const good&y){
return x.t<y.t;
}
inline void add_to_d(int nm){
xgd[++tl]=nm;
int pr=tl;
while(a[xgd[pr]].w<a[xgd[int(floor(pr/2.))]].w&&pr>1) swap(xgd[pr],xgd[int(floor(pr/2.))]),pr=floor(pr/2.);
}
inline void ad_to_d(int nm){
xgd[1]=nm;
int pr=1;
while(pr>tl&&a[xgd[pr]].w>min(a[xgd[pr*2]].w,a[xgd[pr*2+1]].w))
if(a[xgd[pr*2]].w<=a[xgd[pr*2+1]].w) swap(xgd[pr],xgd[pr*2]),pr*=2;
else swap(xgd[pr],xgd[pr*2+1]),pr=pr*2+1;
}
inline void add(int nm){
if(a[nm].t>xnm) add_to_d(nm),xnm++;
else if(a[nm].t==xnm&&a[nm].w>a[xgd[1]].w) ad_to_d(nm);
}
int main(){
while(cin>>n){
memset(xgd,0,sizeof(xgd)),tl=0,ans=0,xnm=0;
for(int i=1;i<=n;++i) cin>>a[i].w>>a[i].t;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;++i) add(i);
for(int i=1;i<=tl;++i) if(xgd[i]!=0) ans+=a[xgd[i]].w;
cout<<ans<<endl;
}
return 0;
}
测了下发现大样例输出偏小qwq
求查错qaq