Submission #1167454

#TimeUsernameProblemLanguageResultExecution timeMemory
1167454SmuggingSpun디지털 회로 (IOI22_circuit)C++20
0 / 100
184 ms2344 KiB
#include "circuit.h" #include<bits/stdc++.h> using namespace std; const int lim = 2e5 + 5; const int mod = 1000002022; void add(int& a, int b){ if((a += b) >= mod){ a -= mod; } } int n, m, pw_2[lim], st[lim << 2], a[lim]; bitset<lim << 2>lazy; void fix(int id, int l, int r, int m){ st[id] = (1LL * st[id << 1] * st[id << 1 | 1] + 1LL * st[id << 1] * (pw_2[r - m - 1] - st[id << 1 | 1] + mod) + 1LL * st[id << 1 | 1] * (pw_2[m - l] - st[id << 1] + mod)) % mod; } void flip(int id, int l, int r){ st[id] = (pw_2[r - l] - st[id] + mod) % mod; lazy.flip(id); } void push_down(int id, int l, int r, int m){ if(lazy.test(id)){ lazy.reset(id); flip(id << 1, l, m); flip(id << 1 | 1, m + 1, r); } } void build(int id, int l, int r){ if(l == r){ st[id] = int(a[l] == 1); return; } int m = (l + r) >> 1; build(id << 1, l, m); build(id << 1 | 1, m + 1, r); fix(id, l, r, m); } void update(int id, int l, int r, int u, int v){ if(l > v || r < u){ return; } if(u <= l && v >= r){ flip(id, l, r); return; } int m = (l + r) >> 1; push_down(id, l, r, m); update(id << 1, l, m, u, v); update(id << 1 | 1, m + 1, r, u, v); fix(id, l, r, m); } void init(int N, int M, vector<int>P, vector<int>A){ n = N; m = M; for(int i = 0; i < m; i++){ a[i] = A[i]; } for(int i = pw_2[0] = 1; i < lim; i++){ pw_2[i] = (pw_2[i - 1] << 1) % mod; } lazy.reset(); build(1, 0, m - 1); } int count_ways(int L, int R){ update(1, 0, m - 1, L - n, R - n); return st[1]; }
#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...