社区讨论
pb_ds 80pts WA on #1 #3
P2286[HNOI2004] 宠物收养场参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @ltfxt9hi
- 此快照首次捕获于
- 2024/03/06 23:11 2 年前
- 此快照最后确认于
- 2024/03/07 15:34 2 年前
CPP
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#include<bits/stdc++.h>
#define int long long
#define mp make_pair
using namespace __gnu_pbds;
using namespace std;
int m,opt,x,ans=0;
int now=0;
tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag,tree_order_statistics_node_update>t;
tree<pair<int,int>,null_type,greater<pair<int,int>>,rb_tree_tag,tree_order_statistics_node_update>t1;
vector<int>v;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>m;
t.insert(mp(-1e9,-1));
t.insert(mp(1e9,-2));
t1.insert(mp(-1e9,-1));
t1.insert(mp(1e9,-2));
for(int i=1;i<=m;i++){
cin>>opt>>x;
if(opt==0){
t.insert(mp(x,i));
t1.insert(mp(x,i));
if(v.size()-now>0){
// cout<<"!\n";
auto mi=t1.lower_bound(mp(v[now],0));
auto ma=t.upper_bound(mp(v[now],0));
ans+=min(abs(v[now]-mi->first),abs(v[now]-ma->first));
if(abs(v[now]-(mi->first))<=abs(v[now]-(ma->first))){
t.erase(t.find_by_order(t1.order_of_key(*mi)));
t1.erase(mi);
cerr<<mi->first<<endl;
}else{
t.erase(ma);
t1.erase(t1.find_by_order(t.order_of_key(*ma)));
cerr<<ma->first<<endl;
}
now++;
ans%=1000000;
}
}
else{
if(t.size()==2 and t1.size()==2){
v.push_back(x);
continue;
}
auto mi=t1.lower_bound(mp(x,0));
auto ma=t.upper_bound(mp(x,0));
ans+=min(abs(x-mi->first),abs(x-ma->first));
if(abs(x-(mi->first))<=abs(x-(ma->first))){
cerr<<mi->first<<"t1"<<endl;
t.erase(t.find(*mi));
t1.erase(mi);
}else{
cerr<<ma->first<<endl;
t.erase(ma);
t1.erase(t1.find(*ma));
}
ans%=1000000;
}
}
cout<<ans%1000000;
return 0;
}
/*
5
0 1
0 4
0 3
0 3
1 3
*/
回复
共 0 条回复,欢迎继续交流。
正在加载回复...