Intervals


Time Limit: 1 Second      Memory Limit:65536 KB      Special Judge

Chiaki has n intervals and thei-th of them is [li,ri]. She wants to delete some intervals so that there does not exist three intervalsa,b andc such thata intersects withb,b intersects withc andc intersects witha.

Chiaki is interested in the minimum number of intervals which need to be deleted.

Note that interval a intersects with intervalb if there exists a real numberx such thatlaxra andlbxrb.

Input

There are multiple test cases. The first line of input contains an integerT, indicating the number of test cases. For each test case:

The first line contains an integer n (1 ≤n ≤ 50000) -- the number of intervals.

Each of the following n lines contains two integersli andri (1 ≤li <ri ≤ 109) denoting thei-th interval. Note that for every 1 ≤i <jn,lilj orrirj.

It is guaranteed that the sum of all n does not exceed 500000.

Output

For each test case, output an integer m denoting the minimum number of deletions. Then in the next line, outputm integers in increasing order denoting the index of the intervals to be deleted. Ifm equals to 0, you should output an empty line in the second line.

Sample Input

1
11
2 5
4 7
3 9
6 11
1 12
10 15
8 17
13 18
16 20
14 21
19 22

Sample Output

4
3 5 7 10

Author: LIN, Xi
Source: The 17th Zhejiang University Programming Contest Sponsored by TuSimple

1,根据数据应该猜到是O(N)或者O(Nlgn)的复杂度解决为题。即区间扫描类型。

2,很容易想到贪心模型中的工作选择问题(最大不重叠区间数)。

3,排序后判断,具体有两种方法。

(1)排序加+线段树(或者BIT)(每加入一个区间前只需要判断L到R的最大值是否‘合格’)。

具体的:按照R从小到大排序之后逐个检查,如果L,R最大值不超过2,那么就把这个区间放进去,区间+1,否则不能放进去。

然后,区间线段树区间处理可以用lazy加以标记。当然也可以离散的树状数组,虽然BIT写起来简单一些,不过加离散化也麻烦,所以将就用线段树。)

(2)排序+贪心,思想和最大不重叠区间数类似。

(1)方法比较好想,不想写代码。点击打开链接

(2)时间和代码上上更加优化。

//本人代码,禁止不思考就引用或者提交。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int N,ans,fin[50030];
struct in{
int L,R,num;
} s[50030]; bool cmp(in a,in b){
return a.R<b.R;
}
void _in()
{
scanf("%d",&N);
for(int i=1;i<=N;i++){
scanf("%d%d",&s[i].L,&s[i].R);
s[i].num=i;
}
}
void _solve()
{
int Fro=0,Now=1,i;
sort(s+1,s+N+1,cmp);
for(i=2;i<=N;i++){
if(s[i].L>s[Now].R) Now=i;
else if(s[i].L>s[Fro].R) {Fro=Now;Now=i;}
else fin[++ans]=s[i].num;
}
printf("%d\n",ans);
sort(fin+1,fin+ans+1);//答案需要排序,我tm找了半天错。。。
for(int j=1;j<=ans;j++)
printf("%d ",fin[j]);
printf("\n");
}
int main()
{
int t,T;
cin>>T;
while(T--){
ans=0;//有计数器,所以不必update
_in();
_solve();
}
return 0;
}
												

zoj3953 Intervals 最大不重叠区间加强版 zoj排名第一~的更多相关文章

  1. [LeetCode] Non-overlapping Intervals 非重叠区间

    Given a collection of intervals, find the minimum number of intervals you need to remove to make the ...

  2. [LeetCode] 435. Non-overlapping Intervals 非重叠区间

    Given a collection of intervals, find the minimum number of intervals you need to remove to make the ...

  3. Leetcode 435.无重叠区间

    无重叠区间 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触" ...

  4. 【LeetCode】435-无重叠区间

    题目描述 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触", ...

  5. Java实现 LeetCode 435 无重叠区间

    435. 无重叠区间 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触& ...

  6. 力扣leetcode 435. 无重叠区间 - 贪心

    非常经典的区间贪心思想 -- 详见博文: 贪心思想之区间贪心 本题给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] ...

  7. ZOJ 2770 Burn the Linked Camp 差分约束 ZOJ排名第一~

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1770 题目大意: 陆逊为了火烧连营七百里,派出了间谍刺探敌情,得之刘备的军营以 ...

  8. [Swift]LeetCode435. 无重叠区间 | Non-overlapping Intervals

    Given a collection of intervals, find the minimum number of intervals you need to remove to make the ...

  9. 435 Non-overlapping Intervals 无重叠区间

    给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠.注意:    可以认为区间的终点总是大于它的起点.    区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠.示例 ...

随机推荐

  1. vue-cli搭建多页面项目如何配置

    这里使用的是webpack模板. 首先安装vue-cli,执行命令 npm install vue-cli -g: 安装完成后初始化一个项目模板:vue init webpack myproject; ...

  2. springboot 入门二- 读取配置信息一

    在上篇入门中简单介绍下springboot启动使用了大量的默认配置,在实际开发过程中,经常需要启动多个服务,那端口如何手动修改呢? 此篇就是简单介绍相关的配置文件信息. Spring Boot允许外部 ...

  3. group by 详解

    1.概述 2.原始表 3.简单Group By 4.Group By 和 Order By 5.Group By中Select指定的字段限制 6.Group By All 7.Group By与聚合函 ...

  4. js Web存储方式

    JSON是数据交互中最常用的一种数据格式. 由于各种语言的语法都不同,在传递数据时,可以将自己语言中的数组.对象等转换为JSON字符串> 传递之后,可以讲JSON字符串,在解析为JSON对象. ...

  5. 团队作业4——第一次项目冲刺(Alpha版本)4.23

    ·本次会议为第二次Scrum Meeting会议~ ·本次会议项目经理召开时间为17:00,在教学楼教室召开,召开时长约30分钟,探讨了昨日任务的进展.查重功能.今日要做的任务以及后续所要开展的工作. ...

  6. 201521123059 《Java程序设计》第十四周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 1.关系型数据库 --建立表格时表中一列中的数据类型必须一致.关系表中的行必须是唯一的,列是不可分的,某些行的某 ...

  7. 命令导入导出oracle库

    目前还是新手:所以记录下来最笨的方式,留用 一.从服务器先把库导出来 exp sys/mima@orcl  file = "d:\pybghs.dmp"   full=y 二.从服 ...

  8. idea使用转载【别人的专栏】

    维C果糖

  9. [05] 利用private来封装

    我们知道,面向对象开发的三大特点是:封装性.继承性.多态性 所谓封装性,实际上是表达了一种信息隐藏.从表面上来阐述,就是使用private修饰符来对属性或者方法进行信息隐藏,而使用public的方法控 ...

  10. Java实现3DES加密--及ANSI X9.8 Format标准 PIN PAN获取PIN BlOCK

    1, 采用银联ANSI X9.8标准 PIN xor PAN获取PIN BlOCK 2, 采用3Des进行加密 参考: des和3Des加密算法实现 要点:因为3DES是对称加密算法,key是24位, ...