답안 #1024788

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1024788 2024-07-16T10:19:44 Z aibark 디지털 회로 (IOI22_circuit) C++17
2 / 100
418 ms 17396 KB
#include "circuit.h"

#include <bits/stdc++.h>
using namespace std;

const int NN = (int)2e5 + 123, mod = (int)1e9 + 2022;

int n, m;
vector<int> p, a;
vector<int> g[NN];
long long sz[NN], ans[NN];

void dfs(int v) {
  sz[v] = max(1, (int)g[v].size());
  for (int to : g[v]) {
    dfs(to);
    sz[v] = sz[v] * sz[to] % mod;
  }
}

void dfs1(int v) {
  long long A = ans[v];
  for (int to : g[v]) {
    ans[to] = A;
    A = A * sz[to] % mod;
  }
  A = 1;
  reverse(g[v].begin(), g[v].end());
  for (int to : g[v]) {
    ans[to] = ans[to] * A % mod;
    A = A * sz[to] % mod;
  }

  for (int to : g[v])
    dfs1(to);
}

long long t[2][4 * NN];
int add[4 * NN];

void build(int v, int tl, int tr) {
  if (tl == tr) {
    t[1][v] = ans[tl + n];
    t[0][v] = 0;
    if (a[tl] == 0)
      swap(t[1][v], t[0][v]);
    return;
  }
  int tm = (tl + tr) >> 1;
  build(v + v, tl, tm);
  build(v + v + 1, tm + 1, tr);
  t[1][v] = t[1][v + v] + t[1][v + v + 1];
  t[0][v] = t[0][v + v] + t[0][v + v + 1];
}

void push(int v) {
  if (add[v]) {
    add[v + v] ^= 1;
    add[v + v + 1] ^= 1;
    swap(t[0][v + v], t[1][v + v]);
    swap(t[0][v + v + 1], t[1][v + v + 1]);
    add[v] = 0;
  }
}

void upd(int v, int tl, int tr, int l, int r) {
  if (tr < l || r < tl)
    return;
  if (l <= tl && tr <= r) {
    swap(t[0][v], t[1][v]);
    add[v] ^= 1;
    return;
  }
  push(v);
  int tm = (tl + tr) >> 1;
  upd(v + v, tl, tm, l, r);
  upd(v + v + 1, tm + 1, tr, l, r);
  t[1][v] = t[1][v + v] + t[1][v + v + 1];
  t[0][v] = t[0][v + v] + t[0][v + v + 1];
}

void init(int N, int M, vector<int> P, vector<int> A) {
  n = N, m = M;
  p = P, a = A;
  for (int i = 1; i < n + m; i++)
    g[p[i]].push_back(i);
  dfs(0);
  ans[0] = 1;
  dfs1(0);
  build(1, 0, m - 1);
}

int count_ways(int L, int R) {
  // long long ansa = 0;
  // for (int i = L; i <= R; i++)
  //   a[i - n] ^= 1;
  // for (int i = n; i < n + m; i++) {
  //   // cout << i << " " << a[i - n] << " " << ans[i] << endl;
  //   ansa = ansa + a[i - n] * ans[i];
  // }
  // return ansa;
  upd(1, 0, m - 1, L - n, R - n);
  return t[1][1];
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 13400 KB Output is correct
2 Correct 3 ms 13400 KB Output is correct
3 Correct 3 ms 13400 KB Output is correct
4 Correct 3 ms 13528 KB Output is correct
5 Correct 2 ms 13400 KB Output is correct
6 Correct 3 ms 13400 KB Output is correct
7 Correct 3 ms 13400 KB Output is correct
8 Correct 3 ms 13400 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 13400 KB Output is correct
2 Incorrect 3 ms 13400 KB 1st lines differ - on the 1st token, expected: '52130940', found: '-1782334720'
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 13400 KB Output is correct
2 Correct 3 ms 13400 KB Output is correct
3 Correct 3 ms 13400 KB Output is correct
4 Correct 3 ms 13528 KB Output is correct
5 Correct 2 ms 13400 KB Output is correct
6 Correct 3 ms 13400 KB Output is correct
7 Correct 3 ms 13400 KB Output is correct
8 Correct 3 ms 13400 KB Output is correct
9 Correct 2 ms 13400 KB Output is correct
10 Incorrect 3 ms 13400 KB 1st lines differ - on the 1st token, expected: '52130940', found: '-1782334720'
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 418 ms 17396 KB 1st lines differ - on the 1st token, expected: '431985922', found: '-747097920'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 418 ms 17396 KB 1st lines differ - on the 1st token, expected: '431985922', found: '-747097920'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 13400 KB Output is correct
2 Incorrect 3 ms 13400 KB 1st lines differ - on the 1st token, expected: '52130940', found: '-1782334720'
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 13400 KB Output is correct
2 Correct 3 ms 13400 KB Output is correct
3 Correct 3 ms 13400 KB Output is correct
4 Correct 3 ms 13528 KB Output is correct
5 Correct 2 ms 13400 KB Output is correct
6 Correct 3 ms 13400 KB Output is correct
7 Correct 3 ms 13400 KB Output is correct
8 Correct 3 ms 13400 KB Output is correct
9 Correct 2 ms 13400 KB Output is correct
10 Incorrect 3 ms 13400 KB 1st lines differ - on the 1st token, expected: '52130940', found: '-1782334720'
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 13400 KB Output is correct
2 Correct 3 ms 13400 KB Output is correct
3 Correct 3 ms 13400 KB Output is correct
4 Correct 3 ms 13528 KB Output is correct
5 Correct 2 ms 13400 KB Output is correct
6 Correct 3 ms 13400 KB Output is correct
7 Correct 3 ms 13400 KB Output is correct
8 Correct 3 ms 13400 KB Output is correct
9 Correct 2 ms 13400 KB Output is correct
10 Incorrect 3 ms 13400 KB 1st lines differ - on the 1st token, expected: '52130940', found: '-1782334720'
11 Halted 0 ms 0 KB -