Skip to content

Commit 0b58f89

Browse files
authored
q -> Q
1 parent 5442066 commit 0b58f89

File tree

1 file changed

+51
-45
lines changed

1 file changed

+51
-45
lines changed

content/6_Advanced/Offline_Del.mdx

+51-45
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
179-
vector<query> tree[MAXN * 4];
179+
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,19 +189,27 @@ 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-
void dfs(int v, int l, int r, vector<ll> &ans) {
192+
193+
void dfs(int v, int l, int r, vector<ll>& ans){
193194
int snapshot = dsu.snapshot();
194195
// perform all available operations upon entering
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) {
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){
200205
// answer type 3 query if we have one
201-
for (query &q : tree[v]) {
202-
if (q.t == 3) { ans[l] = dsu.sum[dsu.get(q.v)]; }
206+
for(Query& q: tree[v]){
207+
if(q.t == 3){
208+
ans[l] = dsu.sum[dsu.get(q.v)];
209+
}
203210
}
204-
} else {
211+
}
212+
else{
205213
// go deeper into the tree
206214
int m = (l + r) / 2;
207215
dfs(2 * v, l, m, ans);
@@ -212,57 +220,55 @@ void dfs(int v, int l, int r, vector<ll> &ans) {
212220
}
213221
214222
int main() {
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;
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;
221227
dsu.sum[i] = x;
222228
}
223229
map<pair<int, int>, int> index_added;
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);
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);
231235
// store index this edge is added, marks beginning of interval
232236
index_added[{u, v}] = i;
233-
} else if (t == 1) {
234-
int u, v;
235-
cin >> u >> v;
236-
if (u > v) swap(u, v);
237-
query cur_q = {1, u, v};
237+
}
238+
else if(t == 1){
239+
int u, v; cin >> u >> v;
240+
if(u > v) swap(u, v);
241+
Query cur_q = {1, u, v};
238242
// add all edges that are deleted to interval [index added, i - 1]
239243
update(cur_q, 1, index_added[{u, v}], i - 1, 0, q - 1);
240244
index_added[{u, v}] = -1;
241-
} else if (t == 2) {
242-
int v, x;
243-
cin >> v >> x;
244-
query cur_q = {2, -1, v, x};
245+
}
246+
else if(t == 2){
247+
int v, x; cin >> v >> x;
248+
Query cur_q = {2, -1, v, x};
245249
// add all sum queries to interval [i, q - 1]
246250
update(cur_q, 1, i, q - 1, 0, q - 1);
247-
} else {
248-
int v;
249-
cin >> v;
250-
query cur_q = {3, -1, v};
251+
}
252+
else{
253+
int v; cin >> v;
254+
Query cur_q = {3, -1, v};
251255
// add all output queries to interval [i, i]
252256
update(cur_q, 1, i, i, 0, q - 1);
253257
}
254258
}
255259
// add all edges that are not deleted to interval [index added, q - 1]
256-
for (auto [edge, index] : index_added) {
257-
if (index != -1) {
258-
query cur_q = {1, edge.first, edge.second};
260+
for(auto [edge, index]: index_added){
261+
if(index != -1){
262+
Query cur_q = {1, edge.first, edge.second};
259263
update(cur_q, 1, index, q - 1, 0, q - 1);
260264
}
261265
}
262266
vector<ll> ans(q, -1);
263267
dfs(1, 0, q - 1, ans);
264-
for (int i = 0; i < q; i++) {
265-
if (ans[i] != -1) { cout << ans[i] << "\n"; }
268+
for(int i = 0; i < q; i++){
269+
if(ans[i] != -1){
270+
cout << ans[i] << "\n";
271+
}
266272
}
267273
}
268274
```

0 commit comments

Comments
 (0)