이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "circuit.h"
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
#define pll pair<ll, ll>
#define f first
#define s second
using namespace std;
const ll mod=1000002022LL;
const ll N=2e5+9;
ll n, m, p[N], a[N];
pll dp[N];
vector<ll> v[N];
void init(int N, int M, vector<int> P, vector<int> A) {
n=N, m=M;
for (int i=0; i<n+m; i++) p[i]=P[i];
for (int i=0; i<m; i++) a[i+n]=A[i];
for (int i=1; i<n+m; i++) v[p[i]].push_back(i);
}
void dfs(ll x){
if (x>=n){
if (a[x]) dp[x]={1, 0};
else dp[x]={0, 1};
return;
}
for (ll i: v[x]) dfs(i);
dp[x].f=(dp[v[x][0]].f*dp[v[x][1]].s%mod+dp[v[x][0]].s*dp[v[x][1]].f%mod+dp[v[x][0]].f*dp[v[x][1]].f*2%mod)%mod;
dp[x].s=(dp[v[x][0]].f*dp[v[x][1]].s%mod+dp[v[x][0]].s*dp[v[x][1]].f%mod+dp[v[x][0]].s*dp[v[x][1]].s*2%mod)%mod;
}
int count_ways(int L, int R) {
for (int i=L; i<=R; i++) a[i]^=1;
dfs(0);
return dp[0].f;
}
# | 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... |