http://codevs.cn/problem/1643/
与线段覆盖1差不多,不过数据过大,需要用到快排,
自己写的快排,最后两个数据没过,醉醉哒。
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
struct MyStruct
{
int a;
int b;
}jiegouti[1000005];
bool cmp(const struct MyStruct &aa, const struct MyStruct &bb)
{
return aa.b<bb.b;
}
void qsort(int left,int right)
{
int low = left;
int high = right;
int key = jiegouti[left].b;
jiegouti[1000004] = jiegouti[left];
if (low<high)
{
while (low<high)
{
while (low<high&&jiegouti[high].b>=key)
high--;
jiegouti[low] = jiegouti[high];
while (low<high&&jiegouti[low].b <= key)
low++;
jiegouti[high] = jiegouti[low];
}
jiegouti[low] = jiegouti[1000004];
qsort(left, low - 1);
qsort(low + 1, right);
}
}
int main()
{
int n;
scanf_s("%d",&n);
int a, b;
for (int i = 0; i < n; i++)
{
scanf_s("%d%d",&a,&b);
if (a>b)
{
jiegouti[i].b = a;
jiegouti[i].a = b;
}
else
{
jiegouti[i].b = b;
jiegouti[i].a = a;
}
}
qsort(0,n-1);
//sort(jiegouti, jiegouti+n, cmp);
int num = 0;
int temp = jiegouti[0].b;
for (int i = 1; i < n; i++)
{
if (jiegouti[i].a >= temp)
{
temp = jiegouti[i].b;
num++;
}
}
printf("%d\n",num+1);
system("pause");
return 0;
}