#include #include // minimum a maximum #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) struct MF { int start; int cil; } mff[1000001]; // porovnávací funkce pro Quicksort // makro poslouží pro zjednodušení zápisu #define R(x) ((struct MF*) x)->cil int cmp(const void *a, const void *b) { return (R(a) - R(b)); } int main(void) { int a, b, k, n, o, p, i; FILE *fin, *fout; fin=fopen("kolej.in", "r"); fscanf(fin, "%d %d\n", &n, &k); for (i = 0; i < n; i++) { fscanf(fin, "%d %d\n", &p, &o); mff[i].start = MAX(1, p-o); mff[i].cil=MIN(k, p+o); } fclose(fin); qsort(mff, n, sizeof(struct MF), cmp); b = 0; a = 0; for (i = 0; i < n; i++) { if (mff[i].start > b) { b = mff[i].cil; a++; } } fout = fopen("zastavky.out", "w"); fprintf(fout, "%d\n", a); fclose(fout); return 0; }