https://vijos.org/p/1444
尽量在右边选点
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ms(i,j) memset(i, j, sizeof(i));
using namespace std;
const int maxn = 10000 + 5;
struct qj
{
int a;
int b;
}q[maxn];
bool cmp(const qj &a, const qj &b)
{
if (a.b!=b.b)
return a.b<b.b;
else return a.a<b.a;
}
int n;
bool used[maxn];
int main ()
{
scanf("%d", &n);
for (int i=0;i<n;i++)
{
scanf("%d%d", &q[i].a, &q[i].b);
}
sort(q, q+n, cmp);
ms(used, false);
int ans = 0;
for (int i=0;i<n;i++)
{
int k = 0;
for (int j=q[i].a;j<=q[i].b;j++)
if (used[j]) k++;
for (int j=q[i].b;j>=q[i].a,k<2;j--)
if (!used[j])
{
ans++;k++;used[j] = true;
}
}
printf("%d\n", ans);
return 0;
}