zoukankan      html  css  js  c++  java
  • #平衡树,set#洛谷 2286 [HNOI2004]宠物收养场

    题目


    分析

    由于宠物被领养者领养和领养者领养宠物操作是一样的,
    考虑建两棵平衡树维护操作,以领养者领养宠物为例
    若当前没有宠物,就将领养者加入平衡树中,
    否则选择最接近的特点值的宠物统计答案并删除该宠物


    代码

    #include <cstdio>
    #include <cctype>
    #include <set>
    #define rr register
    using namespace std;
    const int mod=1000000;
    set<int>uk[2]; int ans;
    set<int>::iterator it;
    inline signed iut(){
    	rr int ans=0; rr char c=getchar();
    	while (!isdigit(c)) c=getchar();
    	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
    	return ans;
    }
    inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
    signed main(){
    	for (rr int T=iut();T;--T){
    		rr int z=iut(),x=iut(),t1,t2;
    		if (uk[z^1].empty()) {uk[z].insert(x); continue;}
    		it=uk[z^1].begin(); if (x<(*it)) {ans=mo(ans,((*it)-x)%mod),uk[z^1].erase(it); continue;}
    		it=--uk[z^1].end(); if (x>(*it)) {ans=mo(ans,(x-(*it))%mod),uk[z^1].erase(it); continue;}
    		it=uk[z^1].lower_bound(x),t2=*it,--it,t1=*it;
    		if (x-t1<=t2-x) ans=mo(ans,(x-t1)%mod),uk[z^1].erase(it);
    		    else ans=mo(ans,(t2-x)%mod),uk[z^1].erase(++it);
    	}
    	return !printf("%d",ans);
    } 
    
  • 相关阅读:
    javascript 字符串截取
    HTML5 转
    Javascript try catch finally
    C#之json字符串转xml字符串
    AspNetCore Json序列化设置
    类加载(对象创建)顺序
    线性表,线性表和链表的区别
    Implement int sqrt(int x).
    Add Binary
    Roman to Integer(将罗马数字转成整数)
  • 原文地址:https://www.cnblogs.com/Spare-No-Effort/p/13531932.html
Copyright © 2011-2022 走看看