1+ package class166 ;
2+
3+ // 大融合,C++版
4+ // 测试链接 : https://www.luogu.com.cn/problem/P4219
5+ // 如下实现是C++的版本,C++版本和java版本逻辑完全一样
6+ // 提交如下代码,可以通过所有测试用例
7+
8+ //#include <bits/stdc++.h>
9+ //
10+ //using namespace std;
11+ //
12+ //struct Event {
13+ // int x, y, t;
14+ //};
15+ //
16+ //bool EventCmp(Event a, Event b) {
17+ // if (a.x != b.x) {
18+ // return a.x < b.x;
19+ // } else if (a.y != b.y) {
20+ // return a.y < b.y;
21+ // } else {
22+ // return a.t < b.t;
23+ // }
24+ //}
25+ //
26+ //const int MAXN = 100001;
27+ //const int MAXT = 3000001;
28+ //int n, q;
29+ //
30+ //int op[MAXN];
31+ //int u[MAXN];
32+ //int v[MAXN];
33+ //
34+ //Event event[MAXN];
35+ //
36+ //int father[MAXN];
37+ //int siz[MAXN];
38+ //int rollback[MAXN][2];
39+ //int opsize = 0;
40+ //
41+ //int head[MAXN << 2];
42+ //int nxt[MAXT];
43+ //int tox[MAXT];
44+ //int toy[MAXT];
45+ //int cnt = 0;
46+ //
47+ //long long ans[MAXN];
48+ //
49+ //void addEdge(int i, int x, int y) {
50+ // nxt[++cnt] = head[i];
51+ // tox[cnt] = x;
52+ // toy[cnt] = y;
53+ // head[i] = cnt;
54+ //}
55+ //
56+ //int find(int i) {
57+ // while (i != father[i]) {
58+ // i = father[i];
59+ // }
60+ // return i;
61+ //}
62+ //
63+ //void Union(int x, int y) {
64+ // int fx = find(x);
65+ // int fy = find(y);
66+ // if (siz[fx] < siz[fy]) {
67+ // int tmp = fx;
68+ // fx = fy;
69+ // fy = tmp;
70+ // }
71+ // father[fy] = fx;
72+ // siz[fx] += siz[fy];
73+ // rollback[++opsize][0] = fx;
74+ // rollback[opsize][1] = fy;
75+ //}
76+ //
77+ //void undo() {
78+ // int fx = rollback[opsize][0];
79+ // int fy = rollback[opsize--][1];
80+ // father[fy] = fy;
81+ // siz[fx] -= siz[fy];
82+ //}
83+ //
84+ //void add(int jobl, int jobr, int jobx, int joby, int l, int r, int i) {
85+ // if (jobl <= l && r <= jobr) {
86+ // addEdge(i, jobx, joby);
87+ // } else {
88+ // int mid = (l + r) >> 1;
89+ // if (jobl <= mid) {
90+ // add(jobl, jobr, jobx, joby, l, mid, i << 1);
91+ // }
92+ // if (jobr > mid) {
93+ // add(jobl, jobr, jobx, joby, mid + 1, r, i << 1 | 1);
94+ // }
95+ // }
96+ //}
97+ //
98+ //void dfs(int l, int r, int i) {
99+ // int unionCnt = 0;
100+ // for (int ei = head[i], fx, fy; ei > 0; ei = nxt[ei]) {
101+ // fx = find(tox[ei]);
102+ // fy = find(toy[ei]);
103+ // if (fx != fy) {
104+ // Union(fx, fy);
105+ // unionCnt++;
106+ // }
107+ // }
108+ // if (l == r) {
109+ // if (op[l] == 2) {
110+ // ans[l] = 1LL * siz[find(u[l])] * siz[find(v[l])];
111+ // }
112+ // } else {
113+ // int mid = (l + r) >> 1;
114+ // dfs(l, mid, i << 1);
115+ // dfs(mid + 1, r, i << 1 | 1);
116+ // }
117+ // for (int k = 1; k <= unionCnt; k++) {
118+ // undo();
119+ // }
120+ //}
121+ //
122+ //void prepare() {
123+ // for (int i = 1; i <= n; i++) {
124+ // father[i] = i;
125+ // siz[i] = 1;
126+ // }
127+ // for (int i = 1; i <= q; i++) {
128+ // event[i].x = u[i];
129+ // event[i].y = v[i];
130+ // event[i].t = i;
131+ // }
132+ // sort(event + 1, event + q + 1, EventCmp);
133+ // for (int l = 1, r = 1; l <= q; l = ++r) {
134+ // int x = event[l].x, y = event[l].y, t = event[l].t;
135+ // while (r + 1 <= q && event[r + 1].x == x && event[r + 1].y == y) {
136+ // r++;
137+ // }
138+ // for (int j = l + 1; j <= r; j++) {
139+ // add(t, event[j].t - 1, x, y, 1, q, 1);
140+ // t = event[j].t + 1;
141+ // }
142+ // if (t <= q) {
143+ // add(t, q, x, y, 1, q, 1);
144+ // }
145+ // }
146+ //}
147+ //
148+ //int main() {
149+ // ios::sync_with_stdio(false);
150+ // cin.tie(nullptr);
151+ // cin >> n >> q;
152+ // char t;
153+ // int x, y;
154+ // for (int i = 1; i <= q; i++) {
155+ // cin >> t >> x >> y;
156+ // op[i] = (t == 'A') ? 1 : 2;
157+ // u[i] = min(x, y);
158+ // v[i] = max(x, y);
159+ // }
160+ // prepare();
161+ // dfs(1, q, 1);
162+ // for (int i = 1; i <= q; i++) {
163+ // if (op[i] == 2) {
164+ // cout << ans[i] << '\n';
165+ // }
166+ // }
167+ // return 0;
168+ //}
0 commit comments