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
| #include <iostream> using namespace std;
int parent[100002]; int order[100002];
int find(int x) { if (parent[x] != x) { parent[x] = find(parent[x]); } return parent[x]; }
int main() { ios::sync_with_stdio(false); cin.tie(0); int n, q; cin >> n >> q; for (int i = 1; i <= n + 1; i++) { parent[i] = i; } for (int i = 1; i <= n; i++) { order[i] = 0; } int current_order = 1; for (int i = 0; i < q; i++) { int op; cin >> op; if (op == 1) { int l, r; cin >> l >> r; int x = find(l); while (x <= r) { if (order[x] == 0) { order[x] = current_order; current_order++; parent[x] = x + 1; } x = find(x); } } else if (op == 2) { int x; cin >> x; cout << order[x] << endl; } } return 0; }
|