Submission #1110126

#TimeUsernameProblemLanguageResultExecution timeMemory
1110126ASN49KDigital Circuit (IOI22_circuit)C++17
18 / 100
3084 ms10064 KiB
#include "circuit.h" #include <bits/stdc++.h> using namespace std; const int N=100'000,mod=1e9+2022; int add(int x,int y) { return (x+y)%mod; } void add_self(int& x,int y) { x+=y; if(x>=mod) { x-=mod; } if(x<0) { x+=mod; } } int prod(int x,int y) { return (1LL*x*y)%mod; } int n,m; vector<int>g[2*N],a; bool lazy[5*N]; int aint[5*N][2],dp[N],produs[N]; void push_down(int nod) { if(lazy[nod]) { swap(aint[2*nod+1][0] , aint[2*nod+1][1]); swap(aint[2*nod+2][0] , aint[2*nod+2][1]); lazy[2*nod+1]^=true; lazy[2*nod+2]^=true; lazy[nod]=false; } } void recalc(int nod) { int l=2*nod+1,r=2*nod+2; } void update(int nod,int st,int dr,int l,int r) { if(st>r || dr<l) { return; } if(l<=st && dr<=r) { lazy[nod]^=true; swap(aint[nod][0] , aint[nod][1]); return; } int m=(st+dr)/2; push_down(nod); update(2*nod+1,st,m,l,r); update(2*nod+2,m+1,dr,l,r); recalc(nod); } void dfs1(int nod) { produs[nod]=max(1,(int)g[nod].size()); for(auto &c:g[nod]) { dfs1(c); produs[nod]=prod(produs[nod] , produs[c]); } } void dfs2(int nod) { int sz=(int)g[nod].size(); if(g[nod].empty()) { return; } vector<int>suf(sz,1),pref(sz,1); for(int i=1;i<sz;i++) { suf[i]=prod(suf[i-1],produs[g[nod][i-1]]); } for(int i=sz-2;i>=0;i--) { pref[i]=prod(pref[i+1],produs[g[nod][i+1]]); } for(int i=0;i<sz;i++) { int c=g[nod][i]; dp[c]=prod(dp[nod] , prod(suf[i] , pref[i])); dfs2(c); } } void init(int nn, int mm, std::vector<int> pp, std::vector<int> init_a) { n=nn; m=mm; for(int i=1;i<n+m;i++) { g[pp[i]].push_back(i); } a=init_a; dp[0]=1; dfs1(0); dfs2(0); } int count_ways(int l, int r) { l-=n; r-=n; for(int i=l;i<=r;i++) { a[i]^=1; } int rez=0; for(int i=0;i<m;i++) { if(a[i]) { add_self(rez , dp[i+n]); } } return rez; }

Compilation message (stderr)

circuit.cpp: In function 'void recalc(int)':
circuit.cpp:45:9: warning: unused variable 'l' [-Wunused-variable]
   45 |     int l=2*nod+1,r=2*nod+2;
      |         ^
circuit.cpp:45:19: warning: unused variable 'r' [-Wunused-variable]
   45 |     int l=2*nod+1,r=2*nod+2;
      |                   ^
#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...