社区讨论

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 条回复,欢迎继续交流。

正在加载回复...