Submission #824354

#TimeUsernameProblemLanguageResultExecution timeMemory
824354boyliguanhanDigital Circuit (IOI22_circuit)C++17
18 / 100
2172 ms2097152 KiB
#include "circuit.h" #include<bits/stdc++.h> using namespace std; long long tm = 1, l[80100], r[80100], v[80100], cont[80100], lz[80100], mod = 1000002022, st[20100], nn, deg[20100], Cont[10010]; set<int> nansc[20100]; void pd(int n) { if(lz[n]){ v[n]=cont[n]-v[n]; lz[n]=0; if(l[n]!=r[n]) lz[n*2]^=1,lz[n*2+1]^=1; } } void build(int i, int L, int R) { l[i] = L; r[i] = R; if(L==R) { cont[i] = Cont[L]; v[i] = st[L]*cont[i]; } else { build(i*2,L,L+R>>1); build(i*2+1,L+R+2>>1, R); cont[i] = cont[i*2]+cont[i*2+1]; v[i] = v[i*2]+v[i*2+1]; } } void update(int i, int tl, int tr) { if(tl<=l[i]&&r[i]<=tr) lz[i]^=1, tr=-1; pd(i); if(l[i]>tr||tl>r[i]) return; update(i*2,tl,tr); update(i*2+1,tl,tr); v[i] = v[i*2]+v[i*2+1]; } void init(int N, int M, vector<int> P, vector<int> A) { for(int i = 0; i < N; i++) nansc[0].insert(i); nn=N; for(int i = 0; i < M; i++) st[i] = A[i]; for(int i = 1; i < N+M; i++){ deg[P[i]]++; nansc[i] = nansc[P[i]]; nansc[i].erase(P[i]); } for(int i = N; i < N+M; i++) { Cont[i-N] = 1; for(auto j: nansc[i]) Cont[i-N] = (Cont[i-N]*deg[j])%mod; } build(1,0,M-1); } int count_ways(int L, int R) { update(1,L-nn,R-nn); return v[1]%mod; }

Compilation message (stderr)

circuit.cpp: In function 'void build(int, int, int)':
circuit.cpp:21:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   21 |     build(i*2,L,L+R>>1);
      |                 ~^~
circuit.cpp:22:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   22 |     build(i*2+1,L+R+2>>1, R);
      |                 ~~~^~
#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...