萌新刚学平板电视求调 WA on 3
查看原帖
萌新刚学平板电视求调 WA on 3
477479
mxym楼主2023/10/18 19:51

https://www.luogu.com.cn/record/130188965 求求大佬们帮我看眼或者有写好的pb_ds代码发我一份,谢谢qwq

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
using namespace __gnu_cxx;
const int mod=1e6;
int n;
tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> tr0;
tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> tr2;
int main(){
	scanf("%d",&n);
	int a,b; 
	int zeronum=0,onenum=0;
	tr2.insert(-99999999); tr0.insert(-99999999);
	tr2.insert(99999999); tr0.insert(99999999);
	long long ans=0;
	for(int i=1;i<=n;++i){
		scanf("%d %d",&a,&b);
		ans=ans%mod;
		if(a==0){
			if(onenum==0){
				tr0.insert(b);
				zeronum++;
			}
			else{
				auto up=*tr2.lower_bound(b);
				auto down=*--tr2.lower_bound(b);
				
				if(abs(up-b)==abs(b-down)){
					ans+=abs(b-down);
					tr2.erase(down);
				}
				else if(abs(up-b) < abs(b-down)){
					ans+=abs(up-b);
					tr2.erase(up);
				}
				else if(abs(up-b) > abs(b-down)){
					ans+=abs(b-down);
					tr2.erase(down);
				}
				onenum--;
			}
		}
		else if(a==1){
			if(zeronum==0){
				tr2.insert(b);
				onenum++;
			}
			else{
				auto up=*tr0.lower_bound(b);
				auto down=*--tr0.lower_bound(b);
				
				if(abs(up-b)==abs(b-down)){
					ans+=abs(b-down);
					tr0.erase(down);
				}
				else if(abs(up-b) < abs(b-down)){
					ans+=abs(up-b);
					tr0.erase(up);
				}
				else if(abs(up-b) > abs(b-down)){
					ans+=abs(b-down);
					tr0.erase(down);
				}
				zeronum--;
			}
		}
		ans=ans%mod;
	}
	cout << ans%mod;
}

//自认为浅显易懂的代码

2023/10/18 19:51
加载中...