제출 #1167447

#제출 시각아이디문제언어결과실행 시간메모리
1167447SmuggingSpun디지털 회로 (IOI22_circuit)C++20
0 / 100
177 ms2424 KiB
#include "circuit.h"
#include<bits/stdc++.h>
using namespace std;
const int lim = 2e5 + 5;
const int mod =  1000002022;
void add(int& a, int b){
    if((a += b) >= mod){
        a -= mod;
    }
}
int n, m, pw_2[lim], st[lim << 2], a[lim];
bitset<lim << 2>lazy;
void fix(int id, int l, int r, int m){
    st[id] = (1LL * st[id << 1] * st[id << 1 | 1] + 1LL * st[id << 1] * (pw_2[r - m - 1] - st[id << 1 | 1] + mod) + 1LL * st[id << 1 | 1] * (pw_2[m - l] - st[id << 1] + mod)) % mod;
}
void flip(int id, int l, int r){
    st[id] = (pw_2[r - l] - st[id] + mod) % mod;
    lazy.flip(id);
}
void push_down(int id, int l, int r, int m){
    if(lazy.test(id)){
        lazy.reset(id);
        flip(id << 1, l, m);
        flip(id << 1 | 1, m + 1, r);
    }
}
void build(int id, int l, int r){
    if(l == r){
        st[id] = int(a[l] == 1);
        return;
    }
    int m = (l + r) >> 1;
    build(id << 1, l, m);
    build(id << 1 | 1, m + 1, r);
    fix(id, l, r, m);
}
void update(int id, int l, int r, int u, int v){
    if(l > v || r < u){
        return;
    }
    if(u <= l && v >= r){
        flip(id, l, r);
        return;
    }
    int m = (l + r) >> 1;
    push_down(id, l, r, m);
    update(id << 1, l, m, u, v);
    update(id << 1 | 1, m + 1, r, u, v);
    fix(id, l, r, m);
}
void init(int N, int M, vector<int>P, vector<int>A){
    n = N;
    m = M;
    for(int i = 0; i < m; i++){
        a[i] = A[i];
    }
    for(int i = pw_2[0] = 1; i < lim; i++){
        pw_2[i] = (pw_2[i - 1] << 1) % mod;
    }
    lazy.reset();
    build(1, 0, m - 1);
}
int count_ways(int L, int R){
    update(1, 0, m - 1, L, R);
    return st[0];
}
#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...