pbds 40pts求助
查看原帖
pbds 40pts求助
578029
ivyjiao楼主2024/6/2 19:39
#include<bits/stdc++.h>
#include<bits/extc++.h> 
#define PII pair<int,int>
#define fi first
#define se second
using namespace std;
using namespace __gnu_pbds;
int n,op,x,now=2,cnt,ans;
tree<PII,null_type,less<PII>,rb_tree_tag,tree_order_statistics_node_update>a;
int main(){
    cin>>n;
    while(n--){
        cin>>op>>x;
        if(now==2){
            a.insert({x,++cnt});
            now=op;
        }
        else if(op==now) a.insert({x,++cnt});
        else{
            int c=0,d=0;
            auto it1=a.lower_bound({x,0}),it2=a.upper_bound({x,0});
            if(it1->fi==x){
                a.erase(it1);
                continue;
            }
            if(it1!=a.begin()){
                it1--;
                c=it1->fi;
            }
            if(it2!=a.end()) d=it2->fi;
            //cout<<it1->fi<<" "<<it1->se<<" "<<it2->fi<<" "<<it2->se<<endl;
            if(!c) a.erase(it2),ans+=d-x;
            else if(!d) a.erase(it1),ans+=x-c;
            else if(x-c<=d-x) a.erase(it1),ans+=x-c;
            else a.erase(it2),ans+=d-x;
            if(!a.size()) now=2;
            //cout<<c<<" "<<x-c<<" "<<d<<" "<<d-x<<" "<<ans<<" "<<a.size()<<endl;
        }
    }
    cout<<ans%1000000;
}
2024/6/2 19:39
加载中...