Submission #98652

# Submission time Handle Problem Language Result Execution time Memory
98652 2019-02-25T02:39:12 Z Tieuphong Relativnost (COCI15_relativnost) C++11
28 / 140
3532 ms 25184 KB
/***************************************************************************/
/**********************  LANG TU HAO HOA  **********************************/
/***************************************************************************/
#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = (a); i <= (b); ++i)
#define FORD(i, a, b) for (int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define sz(x) ((int) x.size())
#define PB push_back
#define PF push_front
#define MP make_pair
#define ll long long
#define F first
#define S second
#define maxc 1000000007
#define MOD 10007
#define base 107
#define eps 1e-6
#define pi acos(-1)
#define N 100005
#define C 22
#define task ""
#define remain(x) ((x > MOD) ? (x - MOD) : x)

using namespace std;

int n, c, a[N], b[N], q;

int inline sub(int x, int y)
{
    if (x > y) return x - y;
        else return x+MOD-y;
}

struct IT
{
    int t[N<<2][C], total[N<<2];

    void Upd(int l, int r, int id, int x)
    {
        if (l > x || r < x) return;
        if (l == r)
        {
            t[id][0] = b[x];
            t[id][1] = a[x];
            total[id] = a[x] + b[x];
            total[id] = remain(total[id]);
            return;
        }
        int mid = (l + r) >> 1;
        Upd(l, mid, id*2, x);
        Upd(mid+1, r, id*2+1, x);
        FOR(i, 0, c-1) t[id][i] = 0;
        FOR(i, 0, c-1)
            FOR(j, 0, c-1)
                if (i+j < c) t[id][i+j] = remain(1ll*t[id][i+j] + ((1ll*t[id*2][i] * t[id*2+1][j]) % MOD));
        total[id] = (1ll*total[id*2] * total[id*2+1]) % MOD;
    }

    int Get()
    {
        int res = total[1];
        FOR(i, 0, c-1)
             res = sub(res, t[1][i]);
        return res;
    }
} Tree;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
    //freopen(task".inp", "r", stdin);
    //freopen(task".out", "w", stdout);
    cin >> n >> c;
    FOR(i, 1, n) cin >> a[i], a[i] %= MOD;
    FOR(i, 1, n) cin >> b[i], b[i] %= MOD;
    FOR(i, 1, n) Tree.Upd(1, n, 1, i);
    cin >> q;
    while (q--)
    {
        int pos, x, y;
        cin >> pos >> x >> y;
        a[pos] = x;
        b[pos] = y;
        Tree.Upd(1, n, 1, pos);
        cout << Tree.Get() << '\n';
    }
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 10 ms 512 KB Output is correct
2 Correct 14 ms 512 KB Output is correct
3 Incorrect 28 ms 512 KB Output isn't correct
4 Incorrect 490 ms 13152 KB Output isn't correct
5 Incorrect 1576 ms 25172 KB Output isn't correct
6 Incorrect 2948 ms 25184 KB Output isn't correct
7 Incorrect 1095 ms 13108 KB Output isn't correct
8 Incorrect 678 ms 25028 KB Output isn't correct
9 Incorrect 995 ms 25088 KB Output isn't correct
10 Incorrect 3532 ms 25060 KB Output isn't correct