• 洛谷2161 会场预约 题解


    好吧,用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;
    }
  • 相关阅读:
    Java 标识符
    Java 关键字详解
    Java 语言的主要特性
    redis学习
    垃圾回收
    JVM内存结构
    sql总结(DML)
    sql总结(DDL)
    加密算法
    《数据结构》 定长顺序串常用操作代码集合
  • 原文地址:https://www.cnblogs.com/logeadd/p/8722227.html
Copyright © 2020-2023  润新知