E. Delete a Segment(删除一个区间,让并区间最多)

题:https://codeforces.com/contest/1285/problem/E

题意:给定n个区间,最多删除一个区间,让最后的并区间个数最大

#include<bits/stdc++.h>
using namespace std;
const int M=4e5+5;
pair<int,int>a[M];
int countt[M];
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n;
        scanf("%d",&n);
        int tot=0;
        for(int l,r,i=1;i<=n;i++){
            scanf("%d%d",&l,&r);
            a[tot++]=make_pair(l,-i);
            a[tot++]=make_pair(r,i);
            countt[i]=0;
        }
        sort(a,a+tot);
        int ans=0;
        multiset<int>b;
        for(int i=0;i<2*n;i++){
            if(a[i].second<0)///left
                b.insert(-a[i].second);
            else///right
                b.erase(b.find(a[i].second));
            if(b.size()==0)///单独的一个并集
                ans++;
            if(b.size()==1&&a[i].second>0)///三个区间,中间一个夹住旁边俩个
                if(a[i+1].second<0)///防止"[[]]"的情况
                    if(a[i].first<a[i+1].first)///排除==的情况,因为这里的==是指的是旁边的俩个,要是等于的话,他们俩个本身就能合成一个集合
                        countt[*b.begin()]++;
            if(b.size()==1&&a[i].second<0&&a[i+1].second>0)///单单的一个区间
                countt[*b.begin()]--;
        }
        int sum=-1;
        for(int i=1;i<=n;i++)
            sum=max(sum,countt[i]);
        printf("%d\n",ans+sum);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/starve/p/12207637.html

时间: 2024-10-12 05:31:54

E. Delete a Segment(删除一个区间,让并区间最多)的相关文章

Es6中如何使用splic,delete等数组删除方法

Es6中如何使用splic,delete等数组删除方法 1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 index:数组开始下标        len: 替换/删除的长度       item:替换的值,删除操作的话 item为空 如:arr = ['a','b','c','d'] 删除 ----  item不设置 arr.splice(1,1)   /

删除一个目录下的所有文件,但保留一个指定文件

此题问题虽小,但是初学者还是很难给出合理的答案的!本文来自老男孩21期网络班学员 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10  十个文件

MFC中怎样完全删除一个类

测试环境:Windows7 32bit.VC++6.0 VC++6.0中添加类很方便,不过删除一个类就没有那么直观了.如果想删除了一个类,其实只需要这样做: 在FileView中的Source Files和Header Files中分别移除类对应的.cpp和.h文件(点击该文件,然后按Delete即可移除,文件仅从工程中移除,并没有在工程目录下被删除) 关闭VC++6.0,然后删除工程目录下的.clw文件,以及类对应的.cpp和.h文件 重新启动VC++6.0,选择View中ClassWizar

github如何删除一个(repository)仓库

GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub.作为开源代码库以及版本控制系统,Github拥有140多万开发者用户.随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法. 在这, 简单记录一下如何在github上删除一个repository. 1. 进入自己的github主页, 选中想要删除的仓库. 2. 进入选中的仓库, 点击Setings选项 3. 进入 Setings

从ACM中删除一个已经创建的Library

从ACM中删除一个已经创建的Library,无法通过界面操作,需要手工从DB中删除.需要删除的表记录有: RECENTUPDATE 找到字段Name等于该libraryName的那条记录删除掉 delete from RECENTUPDATE where NAME='techair'; CONTAINERTEAM 对应一条记录 delete from CONTAINERTEAM where NAME like '%techair%'; WTLIBRARY 对应一条记录 delete from W

创建,插入,删除一个document(createing,indexing and deleteing a document)

创建,插入,删除的请求都是写操作,在把primary shard复制到相对应的replica shard之前,这些操作必须是成功的.如图: 下面将会有序列出使用crate,index,delete在primary shard和replica shard上成功操作document的必要步骤,正如上图所示一样. 1:客户端发送create,index,delete请求到node1,于是把请求转发到node3 2:node1使用document的_id判断得知这个document是在shar0上,这里

linux面试题:删除一个目录下的所有文件,但保留一个指定文件

此题问题虽小,但是初学者还是很难给出合理的答案的!本文来自老男孩21期网络班学员 面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10  十个文件 [[email protected] xx]# touch file{1..10} [[email protected] xx]# ls file1  file10  file2  file3  file4  file5  file6  file7  file8

github【如何删除一个repository(仓库)】

如何删除自己创建的一个项目,我浏览了一下github网站,确实不太容易找到删除功能.这里介绍一下啊如何在github上删除一个repository 一:首先点击进入你要删除的repository,如下图,点击setting 二:将网页拉到下方,找到Delete this repository 按钮,点击. 三:在弹出的对话框中输入你的repository的名字,然后点击下方的按钮完成删除. OK,这样就完全删除了一个项目.

在数据库里彻底删除一个虚拟机

mysql> SET FOREIGN_KEY_CHECKS = 0; 修改KEY值,使此库变为可直接删除状态 Query OK, 0 rows affected (0.00 sec) mysql> delete from instances  where uuid="3ab73261-82ce-4b9a-9a1c-519624e19dc2"; Query OK, 1 row affected (0.03 sec) mysql> SET FOREIGN_KEY_CHEC