제출 #1235829

#제출 시각아이디문제언어결과실행 시간메모리
1235829marizaDigital Circuit (IOI22_circuit)C++20
4 / 100
299 ms11272 KiB
#include "circuit.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll MOD=1e9+2022; const ll M=1e5; const ll NM=2e5; ll n, m, a[M]; vector<ll> t[NM]; ll ans0[NM], ans1[NM]; void dfs(ll curr, bool upd){ // cout<<curr<<endl; if(curr>=n){ ans0[curr]=(a[curr-n]==0); ans1[curr]=(a[curr-n]==1); } else{ if(upd){ dfs(t[curr][0],1); dfs(t[curr][1],1); } ll a0, a1, b0, b1; a0=ans0[t[curr][0]]; a1=ans1[t[curr][0]]; b0=ans0[t[curr][1]]; b1=ans1[t[curr][1]]; // cout<<curr<<" "<<2*a0*b0 + a0*b1 + a1*b0<<" "<<a0*b1 + a1*b0 + 2*a1*b1<<endl; ans0[curr]=(2*a0*b0 + a0*b1 + a1*b0)%MOD; ans1[curr]=(a0*b1 + a1*b0 + 2*a1*b1)%MOD; } } void init(int N, int M, vector<int> P, vector<int> A) { n=N; m=M; for(ll i=0; i<m; i++){ a[i]=A[i]; } for(ll i=1; i<n+m; i++){ t[P[i]].push_back(i); } dfs(0,1); } int count_ways(int l, int r) { a[l-n]^=1; dfs(l,0); ll curr=l; while(curr>0){ curr=(curr-1)/2; dfs(curr,0); } return ans1[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...