이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "circuit.h"
#include <vector>
const int MOD = 1000002022;
using namespace std;
struct node {
long long s, x = 1;
vector<node*> l;
};
void dfs(node* n){
if(n->l.empty()){
n->s = 1;
}else n->s = n->l.size();
for(node* c : n->l){
dfs(c);
n->s = n->s*c->s%MOD;
}
}
void dfx(node* n){
if(n->l.empty()) return;
long long x = n->x;
for(node* c : n->l){
c->x = c->x*x%MOD;
x = (x*c->s)%MOD;
}
x = 1;
for(int i = n->l.size()-1;i >= 0;i--){
node*c = n->l[i];
c->x = c->x * x %MOD;
x = (x*c->s)%MOD;
dfx(c);
}
}
const int nx = 4e5+10;
int st[nx], su[nx];bool lz[nx] = {false};
int n;
int cons(int i, int l, int r, const vector<int>& A, node g[]){
if(l==r){
if(A[l-n]) st[i] = g[l].x;
else st[i]=0;
su[i]=g[l].x;
return st[i];
}
int m = l+r>>1;
st[i] = (cons(i<<1, l, m, A, g)+cons(i<<1|1, m+1, r, A, g))%MOD;
su[i] = (su[i<<1]+su[i<<1|1])%MOD;
return st[i];
}
void upd(int i, int l, int r, int a, int b){
if(lz[i]){
st[i] = (su[i]-st[i]+MOD)%MOD;
if(l!=r){
lz[i<<1] ^= 1;
lz[i<<1|1] ^= 1;
}
lz[i]=false;
}
if(b < l || r < a) return;
if(a <= l && r <= b){
st[i] = (su[i]-st[i]+MOD)%MOD;
if(l!=r){
lz[i<<1] ^= 1;
lz[i<<1|1] ^= 1;
}
return;
}
int m = l+r>>1;
upd(i<<1, l, m, a, b);upd(i<<1|1, m+1, r, a, b);
st[i] = (st[i<<1]+st[i<<1|1])%MOD;
}
int nm;
void init(int N, int M, std::vector<int> P, std::vector<int> A) {
node g[N+M];
nm = N+M-1;
n = N;
for(int i = 1;i < N+M;i++){
g[P[i]].l.push_back(&g[i]);
}
dfs(&g[0]);
dfx(&g[0]);
cons(1, N, N+M-1, A, g);
}
int count_ways(int L, int R) {
upd(1, n, nm, L, R);
return st[1];
}
컴파일 시 표준 에러 (stderr) 메시지
circuit.cpp: In function 'int cons(int, int, int, const std::vector<int>&, node*)':
circuit.cpp:44:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
44 | int m = l+r>>1;
| ~^~
circuit.cpp: In function 'void upd(int, int, int, int, int)':
circuit.cpp:67:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
67 | int m = l+r>>1;
| ~^~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |