#include<bits/stdc++.h> usingnamespace std; #define ll long long constint INF = 0x3f3f3f3f; const ll inf = 0x3f3f3f3f3f3f3f3f; const ll mod = 1e9 + 7; constint N = 1e6 + 10; int n, m; int mx[N][20]; intmain(){ scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { int l, r; scanf("%d%d", &l, &r); mx[l][0] = max(mx[l][0], r); } for (int i = 1; i < N; i++)mx[i][0] = max(mx[i][0], max(mx[i - 1][0], i)); for (int i = 1; i < 20; i++) { for (int j = 0; j < N; j++) { mx[j][i] = mx[mx[j][i - 1]][i - 1]; } } while (m--) { int x, y, ans = 0; scanf("%d%d", &x, &y); for (int i = 19; i >= 0; i--) { if (mx[x][i] < y) { x = mx[x][i]; ans += (1 << i); } } x = mx[x][0]; ans++; if (x < y)puts("-1"); elseprintf("%d\n", ans); } return0; }
#include<bits/stdc++.h> usingnamespace std; #define ll long long constint INF = 0x3f3f3f3f; const ll inf = 0x3f3f3f3f3f3f3f3f; const ll mod = 1e9 + 7; constint N = 1e6 + 10; int n, m; typedef pair<int, int>pii; int mx[N][20]; vector<pii>vc; boolcmp(const pii& a, const pii& b){ return a.second > b.second; } boolck(int s, int t, int x){ int res = s; for (int i = 0; i < 20; i++) { if ((x >> i) & 1)res = mx[res][i]; } return res >= t; } intmain(){ scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { int l, r; scanf("%d%d", &l, &r); vc.push_back(pii(l, r)); } sort(vc.begin(), vc.end(), cmp); int t = INF; for (pii p : vc) { t = min(t, p.second); while (t >= p.first)mx[t][0] = p.second, t--; } for (int i = 1; i < 20; i++) { for (int j = 0; j < N; j++) { mx[j][i] = mx[mx[j][i - 1]][i - 1]; } } while (m--) { int x, y; scanf("%d%d", &x, &y); int L = 1, R = n + 1; while (L < R) { int mid = (L + R) / 2; if (ck(x, y, mid))R = mid; else L = mid + 1; } if (L == n + 1)puts("-1"); elseprintf("%d\n", L); } return0; }