제출 #1016033

#제출 시각아이디문제언어결과실행 시간메모리
1016033May27_thRelativnost (COCI15_relativnost)C++17
98 / 140
2065 ms47256 KiB
#include<bits/stdc++.h> using namespace std; #define i64 long long #define i128 __int128 #define mp make_pair #define pb push_back #define all(x) (x).begin(), (x).end() const int MOD = 10007; int C; struct Tree { int N; vector<vector<int>> st; Tree (int _N) : N(_N), st(_N * 4 + 10) { for (int i = 1; i <= 4 * N + 8; i ++) { st[i].resize(C + 2, 0); } } void update(int id, int l, int r, int p, pair<int, int> x) { if (p < l || p > r) return; if (l == r) { st[id][0] = x.second; st[id][1] = x.first; return; } int mid = (l + r)/2; update(id * 2, l, mid, p, x); update(id * 2 + 1, mid + 1, r, p, x); for (int i = 0; i <= C; i ++) st[id][i] = 0; for (int i = 0; i <= C; i ++) { for (int j = 0; j <= C; j ++) { st[id][min(i + j, C)] += (st[id * 2][i] * st[id * 2 + 1][j]) % MOD; } } for (int i = 0; i <= C; i ++) st[id][i] %= MOD; } }; void Solve(void) { int N; cin >> N >> C; vector<pair<int, int>> p(N); for (int i = 0; i < N; i ++) cin >> p[i].first; for (int i = 0; i < N; i ++) cin >> p[i].second; Tree T(N); for (int i = 0; i < N; i ++) { p[i].first %= MOD; p[i].second %= MOD; T.update(1, 1, N, i + 1, p[i]); } // cout << T.st[1].f[C] << "\n"; int Q; cin >> Q; while (Q --) { int p, A, B; cin >> p >> A >> B; A %= MOD; B %= MOD; T.update(1, 1, N, p, mp(A, B)); cout << T.st[1][C] << "\n"; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(10); int Tests = 1; // cin >> Tests; while (Tests --) { Solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...