제출 #1207088

#제출 시각아이디문제언어결과실행 시간메모리
1207088belgianbot디지털 회로 (IOI22_circuit)C++20
16 / 100
383 ms6108 KiB
#include "circuit.h"
#include<bits/stdc++.h>
using namespace std;

const int MOD = 1000002022;
const int LOG = 26;

vector<int> ans;
struct light {
  long long on, off;
};

light merge(light a, light b) {
  light res;
  res.on = (((a.on * b.off) % MOD + (a.off * b.on) % MOD) % MOD + (2*a.on * b.on) % MOD) %MOD;
  res.off = (((a.off * b.on) % MOD + (a.on * b.off) % MOD) % MOD + (2*a.off * b.off) % MOD) %MOD;
  return res;
}
struct segTree {
  vector<light> t;
  vector<bool> lazy;

  void propagate(int i, int l, int r) {
    if (!lazy[i]) return;
    swap(t[i].on, t[i].off);
    if (l != r) {
      lazy[2*i] = !lazy[2*i];
      lazy[2*i+1] = !lazy[2*i+1];
    }
    lazy[i] = false;
  }
  void init(int sz) {
    t.resize(4*sz);
    lazy.resize(4*sz, false);
  }
  void updt(int i) {
    t[i] = merge(t[i*2], t[i*2+1]);
  }
  void build(int i, int l, int r, vector<int> &v) {
    if (l==r) {
      if (v[l]) {
        t[i].on = 1;
        t[i].off = 0;
      } else {
        t[i].off = 1;
        t[i].on = 0;
      }
      return;
    }
    int mid = (l+r)/2;
    build(2*i, l, mid, v);
    build(2*i+1, mid+1, r, v);
    updt(i);
  }
  void update(int i, int l, int r, int qL, int qR) {
    propagate(i, l, r);
    if (qR < l || qL > r) return;
    if (qL <= l && qR >= r) {
      //cerr << i << ' ';
      //cerr << t[i].off << ' ';
      lazy[i] = true;
      propagate(i, l, r);
      //cerr << t[i].on << ' ';
      return;
    }
    int mid = (l+r)/2;
    update(2*i, l, mid, qL, qR);
    update(2*i+1, mid+1, r, qL, qR);
    updt(i);
    //cerr << t[i].on << ' ';
  }
};


int m, n;
segTree seg;
void init(int N, int M, vector<int> P, vector<int> A) {
  m = M; n = N;
  seg.init(M);
  seg.build(1, 0, M-1, A);
}

int count_ways(int L, int R) {
  seg.update(1, 0, m-1, L-n, R-n);
  return(seg.t[1].on);
}
#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...