# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
1091249 |
2024-09-20T09:12:41 Z |
kawaii |
Klasika (COCI20_klasika) |
C++17 |
|
1723 ms |
447416 KB |
#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define fi first
#define se second
const int MAXN = 2e5 + 5;
int t, n, m, k, node = 1, val[MAXN], tin[MAXN], tout[MAXN], key[MAXN], cnt = 0, max_dist = 0, min_dist = 32;
string s;
vector<int> adj[MAXN];
bool vst[MAXN];
mt19937_64 rng;
struct Query{
char ch;
int x, y;
};
Query q[MAXN];
void dfs(int u){
tin[u] = ++cnt; key[cnt] = u;
for(auto i: adj[u]) dfs(i);
tout[u] = cnt;
}
struct Node{
int size = 0;
vector<int> next[2];
void add(int x){
if(!size){
next[0].push_back(0);
next[1].push_back(0);
}
int crr_id = 0;
for(int i = 30; i >= 0; i--){
bool bit = (((1 << i) & x) > 0);
if(!next[bit][crr_id]){
next[0].push_back(0);
next[1].push_back(0);
next[bit][crr_id] = ++size;
}
crr_id = next[bit][crr_id];
}
}
int query(int x){
if(!size){
next[0].push_back(0);
next[1].push_back(0);
}
int crr_id = 0, ans = 0;
for(int i = 30; i >= 0; i--){
bool bit = !((1 << i) & x);
if(!next[bit][crr_id]) bit = !bit;
else ans |= (1 << i);
crr_id = next[bit][crr_id];
}
return ans;
}
};
Node st[MAXN * 4];
int get(int crr, int l, int r, int lf, int rt, int v){
if(l > rt || r < lf) return 0;
if(lf <= l && r <= rt && r - l + 1 <= max_dist){
if(r - l + 1 >= min_dist) return st[crr].query(v);
int ans = 0;
for(int i = l; i <= r; i++){
if(vst[key[i]]) ans = max(ans, v ^ val[key[i]]);
}
return ans;
}
int mid = l + r >> 1;
return max(get(crr * 2, l, mid, lf, rt, v), get(crr * 2 + 1, mid + 1, r, lf, rt, v));
}
void update(int crr, int l, int r, int id, int val){
if(l > id || r < id) return;
if(l == r){
if(r - l + 1 <= max_dist && r - l + 1 >= min_dist) st[crr].add(val);
return;
}
int mid = l + r >> 1;
update(crr * 2, l, mid, id, val);
update(crr * 2 + 1, mid + 1, r, id, val);
if(r - l + 1 <= max_dist && r - l + 1 >= min_dist) st[crr].add(val);
}
void solve(){
dfs(1);
node = 1; vst[node] = 1;
max_dist = cnt;
for(int i = 1; i <= n; i++){
if(q[i].ch == 'A') vst[++node] = 1, update(1, 1, cnt, tin[node], val[node]);
else{
int ans = get(1, 1, cnt, tin[q[i].y], tout[q[i].y], val[q[i].x]);
if(tin[q[i].y] == 1) ans = max(ans, val[q[i].x]);
cout << ans << "\n";
}
}
}
signed main(){
ios_base::sync_with_stdio(NULL); cin.tie(nullptr); cout.tie(nullptr);
// rng.seed((int)main ^ time(0));
#ifdef Kawaii
auto starttime = chrono::high_resolution_clock::now();
#endif
cin >> n;
for(int i = 1; i <= n; i++){
cin >> s >> q[i].x >> q[i].y;
if(s == "Add"){
q[i].ch = 'A';
val[++node] = val[q[i].x] ^ q[i].y;
adj[q[i].x].push_back(node);
}
else q[i].ch = 'Q';
}
solve();
#ifdef Kawaii
auto endtime = chrono::high_resolution_clock::now();
auto duration = chrono::duration_cast<chrono::milliseconds>(endtime - starttime).count();
cout << "\n=====" << "\nUsed: " << duration << " ms\n";
#endif
}
Compilation message
klasika.cpp: In function 'int get(int, int, int, int, int, int)':
klasika.cpp:74:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
74 | int mid = l + r >> 1;
| ~~^~~
klasika.cpp: In function 'void update(int, int, int, int, int)':
klasika.cpp:84:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
84 | int mid = l + r >> 1;
| ~~^~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
20 ms |
48988 KB |
Output is correct |
2 |
Correct |
20 ms |
48984 KB |
Output is correct |
3 |
Correct |
20 ms |
49000 KB |
Output is correct |
4 |
Correct |
20 ms |
48940 KB |
Output is correct |
5 |
Correct |
20 ms |
48988 KB |
Output is correct |
6 |
Correct |
20 ms |
48836 KB |
Output is correct |
7 |
Correct |
22 ms |
48984 KB |
Output is correct |
8 |
Correct |
24 ms |
49144 KB |
Output is correct |
9 |
Correct |
22 ms |
48988 KB |
Output is correct |
10 |
Correct |
22 ms |
48988 KB |
Output is correct |
11 |
Correct |
24 ms |
49240 KB |
Output is correct |
12 |
Correct |
22 ms |
48988 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
20 ms |
48988 KB |
Output is correct |
2 |
Correct |
20 ms |
48984 KB |
Output is correct |
3 |
Correct |
20 ms |
49000 KB |
Output is correct |
4 |
Correct |
20 ms |
48940 KB |
Output is correct |
5 |
Correct |
20 ms |
48988 KB |
Output is correct |
6 |
Correct |
20 ms |
48836 KB |
Output is correct |
7 |
Correct |
22 ms |
48984 KB |
Output is correct |
8 |
Correct |
24 ms |
49144 KB |
Output is correct |
9 |
Correct |
22 ms |
48988 KB |
Output is correct |
10 |
Correct |
22 ms |
48988 KB |
Output is correct |
11 |
Correct |
24 ms |
49240 KB |
Output is correct |
12 |
Correct |
22 ms |
48988 KB |
Output is correct |
13 |
Correct |
23 ms |
49500 KB |
Output is correct |
14 |
Correct |
24 ms |
50268 KB |
Output is correct |
15 |
Correct |
24 ms |
50524 KB |
Output is correct |
16 |
Correct |
26 ms |
51732 KB |
Output is correct |
17 |
Correct |
23 ms |
49496 KB |
Output is correct |
18 |
Correct |
25 ms |
50264 KB |
Output is correct |
19 |
Correct |
24 ms |
50776 KB |
Output is correct |
20 |
Correct |
27 ms |
51796 KB |
Output is correct |
21 |
Correct |
23 ms |
49500 KB |
Output is correct |
22 |
Correct |
24 ms |
50264 KB |
Output is correct |
23 |
Correct |
25 ms |
50524 KB |
Output is correct |
24 |
Correct |
25 ms |
51616 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
270 ms |
136844 KB |
Output is correct |
2 |
Correct |
414 ms |
228916 KB |
Output is correct |
3 |
Correct |
603 ms |
338468 KB |
Output is correct |
4 |
Correct |
851 ms |
418748 KB |
Output is correct |
5 |
Correct |
347 ms |
140992 KB |
Output is correct |
6 |
Correct |
746 ms |
237928 KB |
Output is correct |
7 |
Correct |
1152 ms |
358416 KB |
Output is correct |
8 |
Correct |
1723 ms |
447416 KB |
Output is correct |
9 |
Correct |
268 ms |
135008 KB |
Output is correct |
10 |
Correct |
436 ms |
227632 KB |
Output is correct |
11 |
Correct |
666 ms |
334104 KB |
Output is correct |
12 |
Correct |
920 ms |
415432 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
20 ms |
48988 KB |
Output is correct |
2 |
Correct |
20 ms |
48984 KB |
Output is correct |
3 |
Correct |
20 ms |
49000 KB |
Output is correct |
4 |
Correct |
20 ms |
48940 KB |
Output is correct |
5 |
Correct |
20 ms |
48988 KB |
Output is correct |
6 |
Correct |
20 ms |
48836 KB |
Output is correct |
7 |
Correct |
22 ms |
48984 KB |
Output is correct |
8 |
Correct |
24 ms |
49144 KB |
Output is correct |
9 |
Correct |
22 ms |
48988 KB |
Output is correct |
10 |
Correct |
22 ms |
48988 KB |
Output is correct |
11 |
Correct |
24 ms |
49240 KB |
Output is correct |
12 |
Correct |
22 ms |
48988 KB |
Output is correct |
13 |
Correct |
23 ms |
49500 KB |
Output is correct |
14 |
Correct |
24 ms |
50268 KB |
Output is correct |
15 |
Correct |
24 ms |
50524 KB |
Output is correct |
16 |
Correct |
26 ms |
51732 KB |
Output is correct |
17 |
Correct |
23 ms |
49496 KB |
Output is correct |
18 |
Correct |
25 ms |
50264 KB |
Output is correct |
19 |
Correct |
24 ms |
50776 KB |
Output is correct |
20 |
Correct |
27 ms |
51796 KB |
Output is correct |
21 |
Correct |
23 ms |
49500 KB |
Output is correct |
22 |
Correct |
24 ms |
50264 KB |
Output is correct |
23 |
Correct |
25 ms |
50524 KB |
Output is correct |
24 |
Correct |
25 ms |
51616 KB |
Output is correct |
25 |
Correct |
270 ms |
136844 KB |
Output is correct |
26 |
Correct |
414 ms |
228916 KB |
Output is correct |
27 |
Correct |
603 ms |
338468 KB |
Output is correct |
28 |
Correct |
851 ms |
418748 KB |
Output is correct |
29 |
Correct |
347 ms |
140992 KB |
Output is correct |
30 |
Correct |
746 ms |
237928 KB |
Output is correct |
31 |
Correct |
1152 ms |
358416 KB |
Output is correct |
32 |
Correct |
1723 ms |
447416 KB |
Output is correct |
33 |
Correct |
268 ms |
135008 KB |
Output is correct |
34 |
Correct |
436 ms |
227632 KB |
Output is correct |
35 |
Correct |
666 ms |
334104 KB |
Output is correct |
36 |
Correct |
920 ms |
415432 KB |
Output is correct |
37 |
Correct |
551 ms |
139452 KB |
Output is correct |
38 |
Correct |
771 ms |
230560 KB |
Output is correct |
39 |
Correct |
913 ms |
350692 KB |
Output is correct |
40 |
Correct |
1042 ms |
422612 KB |
Output is correct |
41 |
Correct |
350 ms |
142816 KB |
Output is correct |
42 |
Correct |
773 ms |
239904 KB |
Output is correct |
43 |
Correct |
1163 ms |
358700 KB |
Output is correct |
44 |
Correct |
1663 ms |
445776 KB |
Output is correct |
45 |
Correct |
371 ms |
136292 KB |
Output is correct |
46 |
Correct |
589 ms |
228496 KB |
Output is correct |
47 |
Correct |
767 ms |
340736 KB |
Output is correct |
48 |
Correct |
987 ms |
418124 KB |
Output is correct |