首页 > 其他 > 详细

[HNOI2004]宠物收养所

时间:2018-12-22 17:48:57      阅读:119      评论:0      收藏:0      [点我收藏+]

传送门

Solution

multiset练习一波?
一直都不太会用


Code?


#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    return x*f;
}
#define itr set<int>::iterator
#define mod 1000000
#define inf 2000000000
std::multiset<int> s;bool kind;
int n,ans;
int main()
{
    n=read();
    register int i,k,x;
    for(i=1;i<=n;i++)
    {
        k=read(),x=read();
        if(!s.size())  s.insert(x),kind=k;
        else if(kind==k) s.insert(x);
        else
        {
            std::multiset<int>::iterator l,r=s.lower_bound(x);
            if(r==s.end()) l=--r,(ans+=x-*l)%=mod,s.erase(l);
            else if(r==s.begin()) (ans+=*r-x)%=mod,s.erase(r);
            else
            {
                l=--s.lower_bound(x);
                if(*r-x>=x-*l) (ans+=x-*l)%=mod,s.erase(l);
                else (ans+=*r-x)%=mod,s.erase(r);
            }
        }
    }
    printf("%d\n",ans%mod);
    return 0;
}



Blog来自PaperCloud,未经允许,请勿转载,TKS!

[HNOI2004]宠物收养所

原文:https://www.cnblogs.com/PaperCloud/p/10161756.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!