Link:http://acm.fzu.edu.cn/problem.php?pid=1230
Problem 1230 区间相交问题
Accept: 716 Submit: 2174
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
给定 x 轴上 n 个闭区间。去掉尽可能少的闭区间,使剩下的闭区间都不相交。
★算法设计: 对于给定的 n 个闭区间,计算去掉的最少闭区间数。
Input
对于每组输入数据,输入数据的第一行是正整数 n (1<=n<=40,000),表示闭区间数。接下来的 n 行中,每行有 2 个整数,分别表示闭区间的 2 个端点。
Output
输出计算出的去掉的最少闭区间数。
Sample Input
310 2015 1020 15
Sample Output
2
Source
FJ CFCS 2008
AC code:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<map>
#include<set>
#include<vector>
#define LL long long
#define INF 0xfffffff
#define PI acos(-1)
#define EPS 1e-6
using namespace std;
struct node{
int s;
int e;
}qu[40010];
bool cmp(node a,node b)
{
return a.e<b.e;
}
int main()
{
// freopen("in.txt","r",stdin);
int i,n,s,e,ans,cur;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d%d",&s,&e);
if(s>e)
swap(s,e);
qu[i].s=s;
qu[i].e=e;
}
sort(qu,qu+n,cmp);
ans=0;
cur=qu[0].e;
for(i=1;i<n;i++)
{
if(qu[i].s<=cur)
{
ans++;
}
else
{
cur=qu[i].e;
}
}
printf("%d\n",ans);
}
return 0;
}