Chiaki has n intervals and the i-th of them is [li, ri]. She wants to delete some intervals so that there does not exist three intervals a, b and c such that a intersects with b, b intersects with c and c intersects with a.

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

Note that interval a intersects with interval b if there exists a real number x such that laxra and lbxrb.

Input

There are multiple test cases. The first line of input contains an integer T, 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 integers li and ri (1 ≤ li < ri ≤ 109) denoting the i-th interval. Note that for every 1 ≤ i < jn, lilj or rirj.

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

<h4< dd="">Output

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

<h4< dd="">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

<h4< dd="">Sample Output

4
3 5 7 10
E - Intervals
题目大意:
就是给你n组数据,在这n组数据里,删除一部分,使得任意三个组数据不相交。
题目思路:
先对它开始的位置进行排序,小的在前,然后取三组数据,进行判断是否两两相交,如果是就先要对它进行排序。
这个排序比较重要,是以结束的数据为标准,数据越大排在越前面。
如果两两相交就删去之后排序在最前面的那组数据,否则就更新一个为最后那组数据。
其实比较想清楚就比较简单了,分成两组数据进行处理,第一组以l进行排序,第二组以r进行排序,如果要删除,就删除r最大的
那组数据,再更新一个数据。值得学习的是,这种处理方法,这样子可以很好的处理表示删除的数据。
 
不过这里要注意一下,对是不是两两相交判断的标准,就是先选两个例如x,y,先满足x与y相交,再加入z,z与x,z与y相交
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn=50050;
struct node
{
int l,r,id;
}ex[maxn];
int ans[maxn]; bool cmp1(node a,node b)
{
if(a.l==b.l) return a.r<b.r;
return a.l<b.l;
}
bool cmp2(node a,node b)
{
if(a.r==b.r) return a.l<b.l;
return a.r>b.r;
}
int isinterval(node x,node y,node z)
{
int f1=0,f2=0;
if(x.r>=y.l) f1=1;//x&y
if(x.r>=z.l&&y.r>=z.l) f2=1;//z&x,z&y
if(f1&&f2) return 1;
return 0;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,pos=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&ex[i].l,&ex[i].r);
ex[i].id=i+1;
}
sort(ex,ex+n,cmp1);
node x[5];
x[0]=ex[0];
x[1]=ex[1];
for(int i=2;i<n;i++)
{
x[2]=ex[i];
// sort(x,x+3,cmp1);
int f=isinterval(x[0],x[1],x[2]);
sort(x,x+3,cmp2);
if(f)
{
ans[pos++]=x[0].id;
swap(x[0],x[2]);
}
}
sort(ans,ans+pos);
printf("%d\n",pos);
if(pos==0) printf("\n");
else
{
for(int i=0;i<pos-1;i++) printf("%d ",ans[i]);
printf("%d\n",ans[pos-1]);
}
}
return 0;
}

  

 
 

E - Intervals 贪心的更多相关文章

  1. POJ 1716 Integer Intervals#贪心

    (- ̄▽ ̄)-* //求一个集合,这个集合与任意一个区间的交集,需至少有两个数字 //贪心过程:按n个区间的最右值从小到大对区间进行排列, //集合首先取第一个区间的最右两个数字, //到第二个区间, ...

  2. {POJ}{动态规划}{题目列表}

    动态规划与贪心相关: {HDU}{4739}{Zhuge Liang's Mines}{压缩DP} 题意:给定20个点坐标,求最多有多少个不相交(点也不相交)的正方形 思路:背包问题,求出所有的正方形 ...

  3. Codeforces Gym 100231B Intervals 线段树+二分+贪心

    Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...

  4. Integer Intervals(贪心)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12123   Accepted: 5129 Description An i ...

  5. 贪心:zoj3953 Intervals

    Description Chiaki has n intervals and the i-th of them is [li, ri]. She wants to delete some interv ...

  6. poj 1716 Integer Intervals (差分约束 或 贪心)

    Integer Intervals Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12192   Accepted: 514 ...

  7. Intervals ZOJ - 3953 (区间贪心)

    Chiaki has n intervals and the i-th of them is [li, ri]. She wants to delete some intervals so that ...

  8. POJ 1089 Intervals【合并n个区间/贪心】

    There is given the series of n closed intervals [ai; bi], where i=1,2,...,n. The sum of those interv ...

  9. ZOJ - 3953 Intervals 【贪心】

    题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3953 题意 给出N个区间,求去掉某些区间,使得剩下的区间中,任何 ...

随机推荐

  1. 从零开始学安全(十五)●DHCP服务

    DHCP,全名为:Dynamic Host Configuration Protocol,动态主机配置协议,它是一种基于UDP的局域网协议,其作用主要有:给主机自动分配IP地址,管理员通过该协议管理内 ...

  2. [Linux] LVS虚拟服务器四层负载均衡

    随着互联网的爆炸性增长及其在我们生活中日益重要的作用,互联网上的流量急剧增加,并且每年以超过100%的速度增长.服务器上的工作负载正在迅速增加,因此服务器很容易在短时间内过载,尤其是对于流行的网站.为 ...

  3. [android] 自定义广播事件

    上一节的短信拦截在4.0以上系统中无效,可以使用这种办法实现,定义一个activity,清单文件中指定主题为透明,在onCreate()方法里面直接调用finsh()方法,关掉,这样可以就可以实现了 ...

  4. js异步编程终级解决方案 async/await

      在最新的ES7(ES2017)中提出的前端异步特性:async.await. async.await是什么 async顾名思义是“异步”的意思,async用于声明一个函数是异步的.而await从字 ...

  5. python基础学习(二)注释和算术运算符

    注释 1. 注释的作用 注释就是对某些代码进行标注说明,以增强代码的可读性.我们在写程序的时候,编写的某一部分代码的意图不太明显,这时候就需要对这一部分代码加以说明,来明确这一部分到的意图.一般的编程 ...

  6. 三角形(hdu1249)递推

    三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. VSCode Snippet 小试牛刀

    这几天因为一个需求,要不断重复一个用特定代码段去包围不同代码的需求. 这个要不断移动鼠标以及重复敲打相同代码的体力活,实在让我老眼昏花,体内的懒人之力迫使我想一个快捷的方法来代替之. 之前就知道Sni ...

  8. ListView子项点击无反应的解决办法

    在使用ListView控件的过程中,当子项包括Button或者CheckBoX等控件时,直接点击子项无反应,分析发现原来是Button,CheckBoX等控件会优先获取焦点,那么子项点击的焦点就被上述 ...

  9. SQL查询,关联查询的区别 (LEFT JOIN 、LEFT OUTER JOIN、INNER JOIN)

    ), f2 ) ) ), f2 ) ) ------------------------------------------------ ','a1') ','a2') ','a3') ','a4') ...

  10. call,apply,bind的用法与区别

    1.call/apply/bind方法的来源 首先,在使用call,apply,bind方法时,我们有必要知道这三个方法究竟是来自哪里?为什么可以使用的到这三个方法? call,apply,bind这 ...