题目描述
请编程完成以下任务:
1.从文件中读取闭区间的个数及它们的描述;
2.找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数。
输入
首行包括区间的数目n,1≤n≤10000,接下来的n行,每行包括两个整数a,b,被一空格隔开,0≤a≤b≤10000,它们是某一个区间的开始值和结束值。
输出
第一行集合元素的个数,对于每一个区间都至少有一个整数属于该区间,且集合所包含元素数目最少。
样例输入
4
3 6
2 4
0 2
4 7
样例输出
2
using namespace std;
int lc;
int n,a[10001],b[10001],c[10001]={},k=0;
void sorta(int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[j]<a[i])
{
swap(a[j],a[i]);
swap(b[j],b[i]);
}
if(a[j]==a[i])
{
if(b[j]-a[j]<=b[i]-a[i])
{
swap(a[j],a[i]);
swap(b[j],b[i]);
}
}
}
}
}
void judgea(int a)
{
for(int i=0;i<=a;i++)
{
if(c[i]>0)
{
k++;
}
}
printf("%d",k);
}
void judgeb(int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[j]==a[i])
{
c[a[j]]=1;
}
}
for(int j=i+1;j<n;j++)
{
if(b[i]>a[j])
{
c[a[j]]=1;
}
}
for(int j=i+1;j<n;j++)
{
if(b[i]<a[i+1])
{
c[b[i]]=1;
c[a[i+1]]=1;
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d %d",&a[i],&b[i]);
}
sorta(n);
lc=b[n-1];
judgeb(n);
judgea(lc);
return 0;
}