思路:

开俩set

模拟一下

就好了

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
int n,xx,yy;
set<int>s1,s2;set<int>::iterator it;
long long ans;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%d",&xx,&yy);
if(!xx){
if(s2.empty())s1.insert(yy);
else{
int tmp=;
it=s2.lower_bound(yy);
if(it!=s2.begin())it--,tmp=min(tmp,yy-*it),it++;
if(it!=s2.end())tmp=min(tmp,*it-yy);
if(it!=s2.begin()){
it--;
if(yy-*it==tmp){s2.erase(it);goto ed1;}
it++;
}s2.erase(it);
ed1:ans+=tmp;
}
}
else{
if(s1.empty())s2.insert(yy);
else{
int tmp=;
it=s1.lower_bound(yy);
if(it!=s1.begin())it--,tmp=min(tmp,yy-*it),it++;
if(it!=s1.end())tmp=min(tmp,*it-yy);
if(it!=s1.begin()){
it--;
if(yy-*it==tmp){s1.erase(it);goto ed2;}
it++;
}s1.erase(it);
ed2:ans+=tmp;
}
}
}printf("%lld\n",ans%);
}
05-28 20:06