#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<int, int> pii;
#define SZ(x) (int) x.size()
#define F first
#define S second
#define lc id << 1
#define rc lc | 1
const int N = 2e5 + 2;
struct Node {
int ptr; vector<int> trie[2];
void add(ll x) {
int v = 0;
for (int i = 30; i >= 0; i--) {
int b = bool(x & (1 << i));
if (!trie[b][v]) trie[b][v] = ptr++;
v = trie[b][v];
}
}
ll get(ll x) {
if (ptr == 1) return 0;
int v = 0; ll res = 0;
for (int i = 30; i >= 0; i--) {
int b = bool(x & (1 << i));
if (trie[!b][v]) v = trie[!b][v], res += 1 << i;
else v = trie[b][v];
}
return res;
}
};
int type[N], X[N], Y[N], St[N], Ft[N], n = 1, q, tim; ll H[N];
vector<pii> adj[N]; Node seg[N << 2];
void DFS(int v, int p = -1) {
St[v] = tim++;
for (pii u : adj[v]) {
if (u.F != p) {
H[u.F] = H[v] ^ u.S;
DFS(u.F, v);
}
}
Ft[v] = tim;
}
void build(int id = 1, int l = 0, int r = tim) {
seg[id].ptr = 1;
seg[id].trie[0].resize((r - l + 1) * 27, 0);
seg[id].trie[1].resize((r - l + 1) * 27, 0);
if (r - l == 1) return;
int mid = (l + r) >> 1;
build(lc, l, mid);
build(rc, mid, r);
}
void add(int pos, ll x, int id = 1, int l = 0, int r = tim) {
seg[id].add(x);
if (r - l == 1) return;
int mid = (l + r) >> 1;
if (pos < mid) add(pos, x, lc, l, mid);
else add(pos, x, rc, mid, r);
}
ll get(int ql, int qr, ll x, int id = 1, int l = 0, int r = tim) {
if (qr <= l || r <= ql) return 0;
if (ql <= l && r <= qr) return seg[id].get(x);
int mid = (l + r) >> 1;
return max(get(ql, qr, x, lc, l, mid), get(ql, qr, x, rc, mid, r));
}
int main() {
scanf("%d", &q);
for (int i = 1; i <= q; i++) {
string t;
cin >> t >> X[i] >> Y[i];
if (t == "Add") {
type[i] = 0;
adj[X[i]].push_back({++n, Y[i]});
} else {
type[i] = 1;
}
}
DFS(1);
build();
add(0, 0);
n = 1;
for (int i = 1; i <= q; i++) {
if (type[i]) {
printf("%lld\n", get(St[Y[i]], Ft[Y[i]], H[X[i]]));
} else {
n++;
add(St[n], H[n]);
}
}
return 0;
}
Compilation message
klasika.cpp: In function 'int main()':
klasika.cpp:78:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
78 | scanf("%d", &q);
| ~~~~~^~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
33 ms |
49004 KB |
Output is correct |
2 |
Correct |
34 ms |
49104 KB |
Output is correct |
3 |
Correct |
33 ms |
49132 KB |
Output is correct |
4 |
Correct |
34 ms |
49260 KB |
Output is correct |
5 |
Correct |
33 ms |
49004 KB |
Output is correct |
6 |
Correct |
35 ms |
49004 KB |
Output is correct |
7 |
Correct |
33 ms |
49132 KB |
Output is correct |
8 |
Correct |
35 ms |
49260 KB |
Output is correct |
9 |
Correct |
33 ms |
49004 KB |
Output is correct |
10 |
Correct |
33 ms |
49132 KB |
Output is correct |
11 |
Correct |
33 ms |
49132 KB |
Output is correct |
12 |
Correct |
33 ms |
49260 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
33 ms |
49004 KB |
Output is correct |
2 |
Correct |
34 ms |
49104 KB |
Output is correct |
3 |
Correct |
33 ms |
49132 KB |
Output is correct |
4 |
Correct |
34 ms |
49260 KB |
Output is correct |
5 |
Correct |
33 ms |
49004 KB |
Output is correct |
6 |
Correct |
35 ms |
49004 KB |
Output is correct |
7 |
Correct |
33 ms |
49132 KB |
Output is correct |
8 |
Correct |
35 ms |
49260 KB |
Output is correct |
9 |
Correct |
33 ms |
49004 KB |
Output is correct |
10 |
Correct |
33 ms |
49132 KB |
Output is correct |
11 |
Correct |
33 ms |
49132 KB |
Output is correct |
12 |
Correct |
33 ms |
49260 KB |
Output is correct |
13 |
Correct |
38 ms |
50028 KB |
Output is correct |
14 |
Correct |
39 ms |
51308 KB |
Output is correct |
15 |
Correct |
41 ms |
52588 KB |
Output is correct |
16 |
Correct |
42 ms |
53868 KB |
Output is correct |
17 |
Correct |
37 ms |
49900 KB |
Output is correct |
18 |
Correct |
40 ms |
51308 KB |
Output is correct |
19 |
Correct |
43 ms |
52460 KB |
Output is correct |
20 |
Correct |
43 ms |
53612 KB |
Output is correct |
21 |
Correct |
37 ms |
49900 KB |
Output is correct |
22 |
Correct |
39 ms |
51180 KB |
Output is correct |
23 |
Correct |
41 ms |
52460 KB |
Output is correct |
24 |
Correct |
42 ms |
53612 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
559 ms |
213484 KB |
Output is correct |
2 |
Correct |
935 ms |
392096 KB |
Output is correct |
3 |
Runtime error |
517 ms |
524292 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
33 ms |
49004 KB |
Output is correct |
2 |
Correct |
34 ms |
49104 KB |
Output is correct |
3 |
Correct |
33 ms |
49132 KB |
Output is correct |
4 |
Correct |
34 ms |
49260 KB |
Output is correct |
5 |
Correct |
33 ms |
49004 KB |
Output is correct |
6 |
Correct |
35 ms |
49004 KB |
Output is correct |
7 |
Correct |
33 ms |
49132 KB |
Output is correct |
8 |
Correct |
35 ms |
49260 KB |
Output is correct |
9 |
Correct |
33 ms |
49004 KB |
Output is correct |
10 |
Correct |
33 ms |
49132 KB |
Output is correct |
11 |
Correct |
33 ms |
49132 KB |
Output is correct |
12 |
Correct |
33 ms |
49260 KB |
Output is correct |
13 |
Correct |
38 ms |
50028 KB |
Output is correct |
14 |
Correct |
39 ms |
51308 KB |
Output is correct |
15 |
Correct |
41 ms |
52588 KB |
Output is correct |
16 |
Correct |
42 ms |
53868 KB |
Output is correct |
17 |
Correct |
37 ms |
49900 KB |
Output is correct |
18 |
Correct |
40 ms |
51308 KB |
Output is correct |
19 |
Correct |
43 ms |
52460 KB |
Output is correct |
20 |
Correct |
43 ms |
53612 KB |
Output is correct |
21 |
Correct |
37 ms |
49900 KB |
Output is correct |
22 |
Correct |
39 ms |
51180 KB |
Output is correct |
23 |
Correct |
41 ms |
52460 KB |
Output is correct |
24 |
Correct |
42 ms |
53612 KB |
Output is correct |
25 |
Correct |
559 ms |
213484 KB |
Output is correct |
26 |
Correct |
935 ms |
392096 KB |
Output is correct |
27 |
Runtime error |
517 ms |
524292 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
28 |
Halted |
0 ms |
0 KB |
- |