Skip to content

Commit 115bab3

Browse files
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
1 parent 0b58f89 commit 115bab3

File tree

1 file changed

+40
-46
lines changed

1 file changed

+40
-46
lines changed

content/6_Advanced/Offline_Del.mdx

+40-46
Original file line numberDiff line numberDiff line change
@@ -172,15 +172,15 @@ const int MAXN = 3e5 + 5;
172172
173173
DSU dsu(MAXN);
174174
175-
struct Query{
175+
struct Query {
176176
int t, u, v, x;
177177
};
178178
179179
vector<Query> tree[MAXN * 4];
180180
181-
void update(Query& q, int v, int l, int r, int L, int R){
182-
if(l > R || r < L) return;
183-
if(l <= L && r >= R){
181+
void update(Query &q, int v, int l, int r, int L, int R) {
182+
if (l > R || r < L) return;
183+
if (l <= L && r >= R) {
184184
tree[v].push_back(q);
185185
return;
186186
}
@@ -189,27 +189,19 @@ void update(Query& q, int v, int l, int r, int L, int R){
189189
update(q, v * 2 + 1, l, r, m + 1, R);
190190
}
191191
192-
193-
void dfs(int v, int l, int r, vector<ll>& ans){
192+
void dfs(int v, int l, int r, vector<ll> &ans) {
194193
int snapshot = dsu.snapshot();
195194
// perform all available operations upon entering
196-
for(Query& q: tree[v]){
197-
if(q.t == 1){
198-
dsu.unite(q.u, q.v);
199-
}
200-
if(q.t == 2){
201-
dsu.add(q.v, q.x);
202-
}
203-
}
204-
if(l == r){
195+
for (Query &q : tree[v]) {
196+
if (q.t == 1) { dsu.unite(q.u, q.v); }
197+
if (q.t == 2) { dsu.add(q.v, q.x); }
198+
}
199+
if (l == r) {
205200
// answer type 3 query if we have one
206-
for(Query& q: tree[v]){
207-
if(q.t == 3){
208-
ans[l] = dsu.sum[dsu.get(q.v)];
209-
}
201+
for (Query &q : tree[v]) {
202+
if (q.t == 3) { ans[l] = dsu.sum[dsu.get(q.v)]; }
210203
}
211-
}
212-
else{
204+
} else {
213205
// go deeper into the tree
214206
int m = (l + r) / 2;
215207
dfs(2 * v, l, m, ans);
@@ -220,55 +212,57 @@ void dfs(int v, int l, int r, vector<ll>& ans){
220212
}
221213
222214
int main() {
223-
cin.tie(0) -> sync_with_stdio(0);
224-
int n, q; cin >> n >> q;
225-
for(int i = 0; i < n; i++){
226-
ll x; cin >> x;
215+
cin.tie(0)->sync_with_stdio(0);
216+
int n, q;
217+
cin >> n >> q;
218+
for (int i = 0; i < n; i++) {
219+
ll x;
220+
cin >> x;
227221
dsu.sum[i] = x;
228222
}
229223
map<pair<int, int>, int> index_added;
230-
for(int i = 0; i < q; i++){
231-
int t; cin >> t;
232-
if(t == 0){
233-
int u, v; cin >> u >> v;
234-
if(u > v) swap(u, v);
224+
for (int i = 0; i < q; i++) {
225+
int t;
226+
cin >> t;
227+
if (t == 0) {
228+
int u, v;
229+
cin >> u >> v;
230+
if (u > v) swap(u, v);
235231
// store index this edge is added, marks beginning of interval
236232
index_added[{u, v}] = i;
237-
}
238-
else if(t == 1){
239-
int u, v; cin >> u >> v;
240-
if(u > v) swap(u, v);
233+
} else if (t == 1) {
234+
int u, v;
235+
cin >> u >> v;
236+
if (u > v) swap(u, v);
241237
Query cur_q = {1, u, v};
242238
// add all edges that are deleted to interval [index added, i - 1]
243239
update(cur_q, 1, index_added[{u, v}], i - 1, 0, q - 1);
244240
index_added[{u, v}] = -1;
245-
}
246-
else if(t == 2){
247-
int v, x; cin >> v >> x;
241+
} else if (t == 2) {
242+
int v, x;
243+
cin >> v >> x;
248244
Query cur_q = {2, -1, v, x};
249245
// add all sum queries to interval [i, q - 1]
250246
update(cur_q, 1, i, q - 1, 0, q - 1);
251-
}
252-
else{
253-
int v; cin >> v;
247+
} else {
248+
int v;
249+
cin >> v;
254250
Query cur_q = {3, -1, v};
255251
// add all output queries to interval [i, i]
256252
update(cur_q, 1, i, i, 0, q - 1);
257253
}
258254
}
259255
// add all edges that are not deleted to interval [index added, q - 1]
260-
for(auto [edge, index]: index_added){
261-
if(index != -1){
256+
for (auto [edge, index] : index_added) {
257+
if (index != -1) {
262258
Query cur_q = {1, edge.first, edge.second};
263259
update(cur_q, 1, index, q - 1, 0, q - 1);
264260
}
265261
}
266262
vector<ll> ans(q, -1);
267263
dfs(1, 0, q - 1, ans);
268-
for(int i = 0; i < q; i++){
269-
if(ans[i] != -1){
270-
cout << ans[i] << "\n";
271-
}
264+
for (int i = 0; i < q; i++) {
265+
if (ans[i] != -1) { cout << ans[i] << "\n"; }
272266
}
273267
}
274268
```

0 commit comments

Comments
 (0)