题目:
考察知识点:区间问题,贪心
思路:
代码:
'算法' ( times:808ms )
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define L first
#define R second
typedef pair<int, int> PII;
const int N = 1e6 + 10;
PII a[N];
signed main()
{
int n;
scanf("%lld", &n);
for (int i = 1; i <= n; i++)
{
int x, w;
scanf("%lld%lld", &x, &w);
a[i].L = x - w;
a[i].R = x + w;
}
sort(a + 1, a + 1 + n);
int m = 0;
// 去掉含括范围较长的线段
for (int i = 1; i <= n; i++)
{
while (m && a[m].R > a[i].R)
m--;
a[++m] = a[i];
}
int ans = 0;
int ed = -3e9;
for (int i = 1; i <= m; i++)
{
if (ed <= a[i].L)
{
ed = a[i].R;
ans++;
}
}
printf("%lld", ans);
return 0;
}