Submission #631796

#TimeUsernameProblemLanguageResultExecution timeMemory
6317964123xr4323Digital Circuit (IOI22_circuit)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #define mp make_pair #define all(a) a.begin(),a.end() using namespace std; using pii = pair <long long, long long>; using ll = long long; constexpr int maxn = 1e5 + 10; constexpr int mod = 1000002022; constexpr long long inf = 1e17 + 10; vector <int> graph [maxn]; long long sub_size [maxn], ans [maxn]; long long x [maxn], tree [maxn << 2], S [maxn << 2]; bool R [maxn << 2]; int I = 0, N = 0; inline void build (int v, int t_l, int t_r) { if (t_l == t_r) { S[v] = ans[t_l]; return; } int t_m = t_l + t_r >> 1; build (v << 1, t_l, t_m); build (v << 1 | 1, t_m + 1, t_r); S[v] = (S[v << 1] + S[v << 1 | 1]) % mod; } inline void push (int v, int t_l, int t_r) { if (!R[v]) return; tree[v] = S[v] - tree[v]; if (t_l < t_r) { R[v << 1] ^= 1; R[v << 1 | 1] ^= 1; } R[v] = false; } inline void update (int l, int r, int v, int t_l, int t_r) { push (v, t_l, t_r); if (l > t_r || t_l > r) return; if (l <= t_l && t_r <= r) { R[v] = true; push (v, t_l, t_r); return; } int t_m = t_l + t_r >> 1; update (l, r, v << 1, t_l, t_m); update (l, r, v << 1 | 1, t_m + 1, t_r); tree[v] = tree[v << 1] + tree[v << 1 | 1]; } inline void dfs0 (int v) { sub_size[v] = max (1LL, (long long) graph[v].size ()); for (int i : graph[v]) { dfs0 (i); sub_size[v] = (sub_size[v] * sub_size[i]) % mod; } } inline void dfs1 (int v, long long cur) { x[v] = cur; for (int i : graph[v]) { long long cur0 = cur; for (int j : graph[v]) if (i != j) cur0 = (cur0 * sub_size[j]) % mod; dfs1 (i, cur0); } } inline void init (int n, int m, vector <int> p, vector <int> a) { for (int i = 1; i < n + m; ++i) graph[p[i]].push_back (i); dfs0 (0); dfs1 (0, 1); for (int i = n; i < n + m; ++i) ans[i] = x[p[i]]; build (1, n, n + m - 1); for (int i = 0; i < m; ++i) if (a[i]) update (i + n, i + n, 1, n, n + m - 1); I = n + m - 1; N = n; } inline int count_ways (int L, int R) { update (L, R, 1, N, I); return tree[1]; }

Compilation message (stderr)

circuit.cpp: In function 'void build(int, int, int)':
circuit.cpp:22:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   22 |     int t_m = t_l + t_r >> 1;
      |               ~~~~^~~~~
circuit.cpp: In function 'void update(int, int, int, int, int)':
circuit.cpp:46:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   46 |     int t_m = t_l + t_r >> 1;
      |               ~~~~^~~~~
/usr/bin/ld: /tmp/ccQRhzH2.o: in function `main':
stub.cpp:(.text.startup+0x128): undefined reference to `init(int, int, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
/usr/bin/ld: stub.cpp:(.text.startup+0x169): undefined reference to `count_ways(int, int)'
collect2: error: ld returned 1 exit status