码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷2161 会场预约 题解

时间:2018-04-05 14:29:23      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:namespace   gpo   include   nbsp   out   zoj   lse   body   insert   

好吧,用stl水过了一道题。

显然,每一次进行修改之前的所有预约一定是没有互相覆盖的。

我们用set保留所有的预约,这样在询问时只要输出set的size就行了

对于每次的新预约,我们就先找到右端点大于该区间左端端点的区间,然后一个一个删除矛盾的预约就行了

复杂度大概为O(n(logn)^2)

(BZOJ上这道题居然要权限,太恶心了。)

# include<set>
# include<cstdio>
# include<algorithm>
# include<iostream>
using namespace std;
struct xianduan{
    int l,r;
    bool operator <(const xianduan&rhs)const{
        if(r!=rhs.r)return r<rhs.r;
        return l<rhs.l;
    }
};
set<xianduan>s;
int n;
char c;
int main(){
     ios::sync_with_stdio(false);
     cin>>n;
     set<xianduan>::iterator it;
     while(n--){
        cin>>c;
        if(c==A){
            int l,r,ans=0;
            cin>>l>>r;
            it=s.lower_bound((xianduan){0,l});
            while(it!=s.end() && r>=it->l){
                ++ans;
                s.erase(it);
                it=s.lower_bound((xianduan){0,l});
            }
            cout<<ans<<endl;
            s.insert((xianduan){l,r});
        }else cout<<s.size()<<endl;
    }
    return 0;
}

 

洛谷2161 会场预约 题解

标签:namespace   gpo   include   nbsp   out   zoj   lse   body   insert   

原文地址:https://www.cnblogs.com/logeadd/p/8722227.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!