1 条题解

  • 1
    @ 2018-10-15 22:36:59

    /*
    既然没有题解,我就写一份。
    代码很烂,但是方法很蛇皮,欢迎大家参考。
    */

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <set>

    using namespace std;

    const long long int INF=2147483646;
    int N;
    long long int sum;
    long long int x,y;
    int t1,t2;

    set<int>s1;
    set<int>s2;

    int main()
    {
    set<int>::iterator it1,it2;
    cin>>N;
    for(int i=1;i<=N;i++)
    {
    cin>>x>>y;
    if(x==0)
    {
    if(s2.empty())
    {
    s1.insert(y);
    continue;
    }
    s2.insert(y);
    it1=s2.find(y);
    if(it1==s2.begin())
    t1=INF;
    else
    {
    it1--;
    t1=abs(y-*it1);
    }
    it2=s2.find(y);
    it2++;
    if(it2==s2.end())
    t2=INF;
    else
    t2=abs(y-*it2);
    if(t1<=t2)
    {
    s2.erase(y);
    s2.erase(*it1);
    sum+=t1;
    sum%=1000000;
    }
    if(t1>t2)
    {
    s2.erase(y);
    s2.erase(*it2);
    sum+=t2;
    sum%=1000000;
    }
    }
    if(x==1)
    {
    if(s1.empty())
    {
    s2.insert(y);
    continue;
    }
    s1.insert(y);
    it1=s1.find(y);
    if(it1==s1.begin())
    t1=INF;
    else
    {
    it1--;
    t1=abs(y-*it1);
    }
    it2=s1.find(y);
    it2++;
    if(it2==s1.end())
    t2=INF;
    else
    t2=abs(y-*it2);
    if(t1<=t2)
    {
    s1.erase(y);
    s1.erase(*it1);
    sum+=t1;
    sum%=1000000;
    }
    if(t1>t2)
    {
    s1.erase(y);
    s1.erase(*it2);
    sum+=t2;
    sum%=1000000;
    }
    }
    }
    cout<<sum<<endl;
    return 0;
    }

  • 1

信息

难度
8
分类
(无)
标签
递交数
115
已通过
15
通过率
13%
上传者