Submission #1312454

#TimeUsernameProblemLanguageResultExecution timeMemory
1312454kawhiet디지털 회로 (IOI22_circuit)C++20
0 / 100
210 ms5652 KiB
#include <bits/stdc++.h> #include "circuit.h" using namespace std; constexpr int N = 2e5 + 5; constexpr int mod = 1000002022; vector<int> a, lvl; vector<long long> dp; vector<vector<int>> g; void op(int i, int x, int y) { int all = (1LL << lvl[x]) % mod; dp[i] = 2 * dp[x] * dp[y] % mod + (all - dp[x]) * dp[y] % mod + (all - dp[y]) * dp[x] % mod; dp[i] %= mod; } void init(int n, int m, vector<int> p, vector<int> c) { a.resize(n + m); g.resize(n + m); dp.resize(n + m); lvl.resize(n + m); for (int i = 1; i < n + m; i++) { g[i].push_back(p[i]); g[p[i]].push_back(i); } for (int i = 0; i < m; i++) { a[i + n] = c[i]; dp[i + n] = c[i]; } for (int i = n - 1; i >= 0; i--) { lvl[i] = lvl[2 * i + 1] + 1; } for (int i = n - 1; i >= 0; i--) { int x = i * 2 + 1, y = i * 2 + 2; op(i, x, y); } } int count_ways(int l, int r) { int i = l; dp[i] ^= 1; while (i > 0) { int p = (i - 1) / 2; int x = 2 * p + 1, y = x + 1; op(p, x, y); i = p; } return dp[0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...