1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| #include <iostream> #include <algorithm>
using namespace std;
const int N = 100010;
int n; struct Range { int l, r; bool operator< (const Range &W)const { return l < W.l; } }range[N];
int main() { int st, ed; scanf("%d%d", &st, &ed); scanf("%d", &n); for (int i = 0; i < n; i ++ ) { int l, r; scanf("%d%d", &l, &r); range[i] = {l, r}; }
sort(range, range + n);
int res = 0; bool success = false; for (int i = 0; i < n; i ++ ) { int j = i, r = -2e9; while (j < n && range[j].l <= st) { r = max(r, range[j].r); j ++ ; }
if (r < st) { res = -1; break; }
res ++ ; if (r >= ed) { success = true; break; }
st = r; i = j - 1; }
if (!success) res = -1; printf("%d\n", res);
return 0; }
|