Submission #1247479

#TimeUsernameProblemLanguageResultExecution timeMemory
1247479m5588ohammedDigital Circuit (IOI22_circuit)C++20
0 / 100
208 ms8868 KiB
#include "circuit.h" #include <bits/stdc++.h> using namespace std; #define mod 1000002022 #define ll long long ll n,m; ll to[200005],tf[200005],ta[200005],cs[200005]; ll lazy[200005]; vector <ll> v[200005]; void update_node(ll i){ if(n<i) return; to[i]=(to[i*2]*to[i*2+1]*2)%mod; to[i]+=(tf[i*2]*to[i*2+1])%mod; to[i]%=mod; to[i]+=(to[i*2]*tf[i*2+1])%mod; to[i]%=mod; tf[i]=(ta[i]-to[i]+mod)%mod; //cout<<"UPDATE "<<i<<" "<<tf[i]<<" "<<to[i]<<endl; return; } void pushD(int l1,int r1,int i){ if(lazy[i]==1) swap(to[i],tf[i]); if(l1!=r1){ lazy[i*2]^=lazy[i]; lazy[i*2+1]^=lazy[i]; } lazy[i]=0; return; } void flip(ll l1,ll r1,ll i,ll l,ll r){ pushD(l1,r1,i); if(l1>r||l>r1) return; if(l<=l1&&r1<=r){ lazy[i]^=1; pushD(l1,r1,i); return; } flip(l1,(l1+r1)/2,i*2,l,r); flip((l1+r1)/2+1,r1,i*2+1,l,r); update_node(i); return; } void build(ll i){ ta[i]=1; if(n<i) return; for(ll j:v[i]){ build(j); ta[i]=(ta[i]*ta[j])%mod; } ta[i]*=(ll)v[i].size(); ta[i]%=mod; return; } void init(int N, int M, std::vector<int> P, std::vector<int> A) { n=N;m=M; for(int i=0;i<m;i++) cs[i+n+1]=A[i]; for(int i=1;i<n+m;i++) v[P[i]+1].push_back(i+1); build(1); for(int i=n+1;i<=n+m;i++){ if(cs[i]==1) to[i]=1; else tf[i]=1; } for(int i=n;i>=1;i--) update_node(i); return; } int count_ways(int L, int R){ flip(0,n,1,L-n+1,R-n+1); return to[1]; } // 3 4 3 // -1 0 1 2 1 1 0 // 1 0 1 0 // 3 4 // 4 5 // 3 6 // 1 7 3 // -1 0 0 0 0 0 0 0 // 1 1 1 1 1 1 1 // 1 1 // 2 2 // 4 7 // 3 4 1 // -1 0 0 1 1 2 2 // 1 1 1 1 // 3 3
#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...