Submission #1271867

#TimeUsernameProblemLanguageResultExecution timeMemory
1271867baotoan655Relativnost (COCI15_relativnost)C++20
140 / 140
599 ms14172 KiB
#include <bits/stdc++.h>
#define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
using namespace std;
const int N = 1e5 + 5, MOD = 10007;

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

void build(int i, int l, int r) {
    if (r - l == 1) {
        if (l < n) {
            v[0][i] = b[l] % MOD;
            v[1][i] = a[l] % MOD;
            v1[i] = (a[l] + b[l]) % MOD;
        } else {
            v[0][i] = 1;
            v1[i] = 1;
        }
        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; k <= C - j; 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; k <= C - j; 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;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    file("A") else file("relativnost");
    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 << '\n';
    }
    return 0;
}

Compilation message (stderr)

relativnost.cpp: In function 'int main()':
relativnost.cpp:2:58: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    2 | #define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
relativnost.cpp:61:5: note: in expansion of macro 'file'
   61 |     file("A") else file("relativnost");
      |     ^~~~
relativnost.cpp:2:91: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    2 | #define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                                                    ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
relativnost.cpp:61:5: note: in expansion of macro 'file'
   61 |     file("A") else file("relativnost");
      |     ^~~~
relativnost.cpp:2:58: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    2 | #define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
relativnost.cpp:61:20: note: in expansion of macro 'file'
   61 |     file("A") else file("relativnost");
      |                    ^~~~
relativnost.cpp:2:91: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    2 | #define file(name)  if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
      |                                                                                    ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
relativnost.cpp:61:20: note: in expansion of macro 'file'
   61 |     file("A") else file("relativnost");
      |                    ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...