1 条题解

  • 0
    @ 2023-5-31 19:46:47
    # include <bits/stdc++.h>
    # define rr register
    const int N=32400,INF=0x3f3f3f3f;
    
    std::multiset <int> S;
     
    int n;
    
    inline int read(void){
    	int res,f=1;
    	char c;
    	while((c=getchar())<'0'||c>'9')
    		if(c=='-')f=-1;
    	res=c-48;
    	while((c=getchar())>='0'&&c<='9')
    		res=res*10+c-48;
    	return res*f;	
    }
    inline int nxt(int v){
    	std::multiset <int>::iterator it=S.lower_bound(v);
    	if(it==S.end()){
    		return INF;
    	}
    	return *it;
    }
    inline int pre(int v){
    	std::multiset <int>::iterator it=S.upper_bound(v);
    	if(it==S.begin()){
    		return -INF;
    	}
    	return *(--it);
    }
    int main(void){
    	n=read();
    	int flag=0,ans=0;
    	for(rr int i=1;i<=n;++i){
    		int x,v;
    		x=read(),v=read();
    		if(flag==x){
    			S.insert(v);
    		}else if(S.empty()){
    			flag=x;
    			S.insert(v);
    		}else{
    			int l=pre(v),r=nxt(v);
    			if(abs(l-v)<=abs(r-v)){
    				ans=(ans+abs(l-v))%1000000;
    				S.erase(l);
    			}else{
    				ans=(ans+abs(r-v))%1000000;
    				S.erase(r);
    			}
    		} 
    	}
    	printf("%d",ans);
    	return 0;
    }
    
    • 1

    「一本通 4.6 练习 1」宠物收养所

    信息

    ID
    623
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者