#include #include /* O(n*log(n) + n), сортировка плюс проход по массиву заявок */ /* Структура для хранения заявки */ typedef struct application { int begin; int end; } app; int vector_compare(const void *a, const void *b); int solve(app *vector, unsigned int N); int main() { /* Число заявок */ unsigned int N; scanf("%d", &N); app* vector = (app*)calloc(N, sizeof(app)); /* Считываем информацию о заявках, начало-конец */ for (unsigned int i = 0; i < N; i++) { scanf("%d %d", &vector[i].begin, &vector[i].end); } /* Сортируем заявки по времени окончания */ qsort(vector, N, sizeof(app), vector_compare); int result = solve(vector, N); printf("Количество выполненных заявок:%d\n", result); free(vector); } int vector_compare(const void *a, const void *b) { return ((const app *)a)->end - ((const app *)b)->end; } int solve(app *vector, unsigned int N) { /* Сохраняем начальное значение N */ unsigned int result = N; /* Конец очередной заявки */ int end = vector[0].end; for (unsigned int i = 1; i < N; i++) { if (end > vector[i].begin) { /* Удаляем заявки, время начала которых раньше времени конца Изменяем счетчик заявок */ (result)--; } else { /* Иначе, обновляем значение очередного конца */ end = vector[i].end; } } return result; }