Submission #1228360

#TimeUsernameProblemLanguageResultExecution timeMemory
1228360takoshanavaRelativnost (COCI15_relativnost)C++20
0 / 140
521 ms25756 KiB
#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define fs first
#define sc second
using namespace std;

const int N = 1e5 + 5, MOD = 10007;

int n, C, q, a[N], b[N];
int sz;
int v[20][4 * N], v1[4 * N];

void build(int i, int l, int r) {
    if (r - l == 1) {
        v[0][i] = b[l] % MOD; 
        v[1][i] = a[l] % MOD;    
        v1[i] = (a[l] + b[l]) % MOD; 
        return;
    }
    int m = (l + r) / 2;
    build(2 * i + 1, l, m);
    build(2 * i + 2, m, r);

    for (int j = 0; j <= C; j++) v[j][i] = 0;

    for (int j = 0; j <= C; j++) {
        for (int k = 0; j + k <= C; k++) {
            v[j + k][i] = (v[j + k][i] + v[j][2 * i + 1] * v[k][2 * i + 2]) % MOD;
        }
    }
    v1[i] = v1[2 * i + 1] * v1[2 * i + 2] % MOD;
}

void upd(int pos, int i, int l, int r) {
    if (r - l == 1) {
        v[0][i] = b[l] % MOD;
        v[1][i] = a[l] % MOD;
        v1[i] = (a[l] + b[l]) % MOD;
        return;
    }
    int m = (l + r) / 2;
    if (pos < m) upd(pos, 2 * i + 1, l, m);
    else upd(pos, 2 * i + 2, m, r);

    for (int j = 0; j <= C; j++) v[j][i] = 0;

    for (int j = 0; j <= C; j++) {
        for (int k = 0; j + k <= C; k++) {
            v[j + k][i] = (v[j + k][i] + v[j][2 * i + 1] * v[k][2 * i + 2]) % MOD;
        }
    }
    v1[i] = v1[2 * i + 1] * v1[2 * i + 2] % MOD;
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> n >> C;
    sz = 1;
    while (sz < n) sz <<= 1;

    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < n; i++) cin >> b[i];

    build(0, 0, sz);

    cin >> q;
    while (q--) {
        int idx, a1, b1;
        cin >> idx >> a1 >> b1;
        idx--;
        a[idx] = a1 % MOD;
        b[idx] = b1 % MOD;
        upd(idx, 0, 0, sz);

        int ans = v1[0];
        for (int j = 0; j < C; j++) {
            ans = (ans - v[j][0] + MOD) % MOD;
        }
        cout << ans << endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...