Submission #642958

# Submission time Handle Problem Language Result Execution time Memory
642958 2022-09-21T00:18:26 Z Pajaraja Digital Circuit (IOI22_circuit) C++17
25 / 100
1008 ms 16128 KB
#include "circuit.h"
#include <bits/stdc++.h>
#include <vector>
#define MAXN 200007
#define MOD 1000002022
using namespace std;
vector<int> g[MAXN];
long long a[MAXN],t[MAXN],seg[2][MAXN];
int n,m,p[MAXN],st[MAXN],bag[MAXN];
void dfst(int s)
{
    for(int i=0;i<g[s].size();i++) dfst(g[s][i]);
    if(g[s].size()==0) t[s]=1;
    else t[s]=g[s].size();
    for(int i=0;i<g[s].size();i++) t[s]=(t[s]*t[g[s][i]])%MOD;
}
void dfs(int s,long long p)
{
    if(s>=n) {a[s-n]=p; return;}
    vector<long long> lv(g[s].size()+7),ds(g[s].size()+7);
    ds[0]=1; lv[g[s].size()+1]=1;
    for(int i=0;i<g[s].size();i++) ds[i+1]=(ds[i]*t[g[s][i]])%MOD;
    for(int i=g[s].size()-1;i>=0;i--) lv[i+1]=(lv[i+2]*t[g[s][i]])%MOD;
    for(int i=0;i<g[s].size();i++) dfs(g[s][i],(p*(ds[i]*lv[i+2])%MOD)%MOD);
}
void build(int l,int r,int ind)
{
    if(l==r) {seg[st[l]][ind]=a[l]; return;}
    int s=(l+r)/2;
    build(l,s,2*ind);
    build(s+1,r,2*ind+1);
    for(int k=0;k<2;k++) seg[k][ind]=(seg[k][2*ind]+seg[k][2*ind+1])%MOD;
}
void relax(int ind)
{
    bag[2*ind]^=bag[ind]; bag[2*ind+1]^=bag[ind];
    bag[ind]=0;
    for(int k=0;k<2;k++) seg[k][ind]=(seg[k^bag[2*ind]][2*ind]+seg[k^bag[2*ind+1]][2*ind+1])%MOD;
}
void upd(int lt,int rt,int l,int r,int ind)
{
    if(r<lt || l>rt) return;
    if(l>=lt && r<=rt) {bag[ind]^=1; return;}
    relax(ind);
    int s=(l+r)/2;
    upd(lt,rt,l,s,2*ind);
    upd(lt,rt,s+1,r,2*ind+1);
    for(int k=0;k<2;k++) seg[k][ind]=(seg[k^bag[2*ind]][2*ind]+seg[k^bag[2*ind+1]][2*ind+1])%MOD;
}
void init(int N, int M, std::vector<int> P, std::vector<int> A) {
    n=N; m=M;
    for(int i=1;i<N+M;i++) g[P[i]].push_back(i);
    for(int i=0;i<M;i++) st[i]=A[i];
    dfst(0); dfs(0,1);
    build(0,m-1,1);
}

int count_ways(int L, int R) {
    upd(L-n,R-n,0,m-1,1);
    return seg[1^bag[1]][1];
}

Compilation message

circuit.cpp: In function 'void dfst(int)':
circuit.cpp:12:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 |     for(int i=0;i<g[s].size();i++) dfst(g[s][i]);
      |                 ~^~~~~~~~~~~~
circuit.cpp:15:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |     for(int i=0;i<g[s].size();i++) t[s]=(t[s]*t[g[s][i]])%MOD;
      |                 ~^~~~~~~~~~~~
circuit.cpp: In function 'void dfs(int, long long int)':
circuit.cpp:22:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     for(int i=0;i<g[s].size();i++) ds[i+1]=(ds[i]*t[g[s][i]])%MOD;
      |                 ~^~~~~~~~~~~~
circuit.cpp:24:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |     for(int i=0;i<g[s].size();i++) dfs(g[s][i],(p*(ds[i]*lv[i+2])%MOD)%MOD);
      |                 ~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4944 KB Output is correct
2 Correct 3 ms 4944 KB Output is correct
3 Correct 3 ms 5072 KB Output is correct
4 Correct 3 ms 5072 KB Output is correct
5 Correct 3 ms 5072 KB Output is correct
6 Correct 4 ms 5072 KB Output is correct
7 Correct 4 ms 5072 KB Output is correct
8 Correct 4 ms 5136 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4944 KB Output is correct
2 Correct 3 ms 5072 KB Output is correct
3 Correct 3 ms 5072 KB Output is correct
4 Correct 3 ms 5072 KB Output is correct
5 Correct 3 ms 5072 KB Output is correct
6 Correct 4 ms 5072 KB Output is correct
7 Correct 3 ms 5072 KB Output is correct
8 Correct 4 ms 5072 KB Output is correct
9 Correct 4 ms 5040 KB Output is correct
10 Correct 5 ms 5380 KB Output is correct
11 Correct 4 ms 5328 KB Output is correct
12 Correct 4 ms 5072 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4944 KB Output is correct
2 Correct 3 ms 4944 KB Output is correct
3 Correct 3 ms 5072 KB Output is correct
4 Correct 3 ms 5072 KB Output is correct
5 Correct 3 ms 5072 KB Output is correct
6 Correct 4 ms 5072 KB Output is correct
7 Correct 4 ms 5072 KB Output is correct
8 Correct 4 ms 5136 KB Output is correct
9 Correct 2 ms 4944 KB Output is correct
10 Correct 3 ms 5072 KB Output is correct
11 Correct 3 ms 5072 KB Output is correct
12 Correct 3 ms 5072 KB Output is correct
13 Correct 3 ms 5072 KB Output is correct
14 Correct 4 ms 5072 KB Output is correct
15 Correct 3 ms 5072 KB Output is correct
16 Correct 4 ms 5072 KB Output is correct
17 Correct 4 ms 5040 KB Output is correct
18 Correct 5 ms 5380 KB Output is correct
19 Correct 4 ms 5328 KB Output is correct
20 Correct 4 ms 5072 KB Output is correct
21 Incorrect 3 ms 5072 KB 1st lines differ - on the 1st token, expected: '759476520', found: '705674784'
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 569 ms 8704 KB Output is correct
2 Correct 815 ms 12416 KB Output is correct
3 Correct 935 ms 11976 KB Output is correct
4 Correct 1008 ms 11940 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 569 ms 8704 KB Output is correct
2 Correct 815 ms 12416 KB Output is correct
3 Correct 935 ms 11976 KB Output is correct
4 Correct 1008 ms 11940 KB Output is correct
5 Correct 729 ms 8784 KB Output is correct
6 Correct 976 ms 12428 KB Output is correct
7 Correct 950 ms 12424 KB Output is correct
8 Correct 827 ms 12416 KB Output is correct
9 Correct 380 ms 5200 KB Output is correct
10 Correct 736 ms 5456 KB Output is correct
11 Correct 913 ms 5456 KB Output is correct
12 Correct 895 ms 5456 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4944 KB Output is correct
2 Correct 3 ms 5072 KB Output is correct
3 Correct 3 ms 5072 KB Output is correct
4 Correct 3 ms 5072 KB Output is correct
5 Correct 3 ms 5072 KB Output is correct
6 Correct 4 ms 5072 KB Output is correct
7 Correct 3 ms 5072 KB Output is correct
8 Correct 4 ms 5072 KB Output is correct
9 Correct 4 ms 5040 KB Output is correct
10 Correct 5 ms 5380 KB Output is correct
11 Correct 4 ms 5328 KB Output is correct
12 Correct 4 ms 5072 KB Output is correct
13 Correct 569 ms 8704 KB Output is correct
14 Correct 815 ms 12416 KB Output is correct
15 Correct 935 ms 11976 KB Output is correct
16 Correct 1008 ms 11940 KB Output is correct
17 Correct 729 ms 8784 KB Output is correct
18 Correct 976 ms 12428 KB Output is correct
19 Correct 950 ms 12424 KB Output is correct
20 Correct 827 ms 12416 KB Output is correct
21 Correct 380 ms 5200 KB Output is correct
22 Correct 736 ms 5456 KB Output is correct
23 Correct 913 ms 5456 KB Output is correct
24 Correct 895 ms 5456 KB Output is correct
25 Incorrect 1000 ms 16128 KB 1st lines differ - on the 1st token, expected: '732332002', found: '764399548'
26 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4944 KB Output is correct
2 Correct 3 ms 4944 KB Output is correct
3 Correct 3 ms 5072 KB Output is correct
4 Correct 3 ms 5072 KB Output is correct
5 Correct 3 ms 5072 KB Output is correct
6 Correct 4 ms 5072 KB Output is correct
7 Correct 4 ms 5072 KB Output is correct
8 Correct 4 ms 5136 KB Output is correct
9 Correct 2 ms 4944 KB Output is correct
10 Correct 3 ms 5072 KB Output is correct
11 Correct 3 ms 5072 KB Output is correct
12 Correct 3 ms 5072 KB Output is correct
13 Correct 3 ms 5072 KB Output is correct
14 Correct 4 ms 5072 KB Output is correct
15 Correct 3 ms 5072 KB Output is correct
16 Correct 4 ms 5072 KB Output is correct
17 Correct 4 ms 5040 KB Output is correct
18 Correct 5 ms 5380 KB Output is correct
19 Correct 4 ms 5328 KB Output is correct
20 Correct 4 ms 5072 KB Output is correct
21 Incorrect 3 ms 5072 KB 1st lines differ - on the 1st token, expected: '759476520', found: '705674784'
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4944 KB Output is correct
2 Correct 3 ms 4944 KB Output is correct
3 Correct 3 ms 5072 KB Output is correct
4 Correct 3 ms 5072 KB Output is correct
5 Correct 3 ms 5072 KB Output is correct
6 Correct 4 ms 5072 KB Output is correct
7 Correct 4 ms 5072 KB Output is correct
8 Correct 4 ms 5136 KB Output is correct
9 Correct 2 ms 4944 KB Output is correct
10 Correct 3 ms 5072 KB Output is correct
11 Correct 3 ms 5072 KB Output is correct
12 Correct 3 ms 5072 KB Output is correct
13 Correct 3 ms 5072 KB Output is correct
14 Correct 4 ms 5072 KB Output is correct
15 Correct 3 ms 5072 KB Output is correct
16 Correct 4 ms 5072 KB Output is correct
17 Correct 4 ms 5040 KB Output is correct
18 Correct 5 ms 5380 KB Output is correct
19 Correct 4 ms 5328 KB Output is correct
20 Correct 4 ms 5072 KB Output is correct
21 Incorrect 3 ms 5072 KB 1st lines differ - on the 1st token, expected: '759476520', found: '705674784'
22 Halted 0 ms 0 KB -