Submission #1139433

#TimeUsernameProblemLanguageResultExecution timeMemory
1139433THXuanRelativnost (COCI15_relativnost)C++20
42 / 140
35 ms17744 KiB
// dp[i][j] = the number of ways if consider the first i people and j people get colored paintings /* * transition * dp[i][j] = ((dp[i-1][j-1] * a[i]) +(dp[i-1][j]* b[i])) % MOD; */ #include <iostream> #include <vector> #include <algorithm> #include <queue> #include <set> #include <map> #define INF 1e9 typedef long long ll; using namespace std; int n = 0, c = 0; const ll MOD = 10007; ll a[100005], b[100005], dp[100005][25]; void memo(int v) { for (int i = 0; i <= c; i++)dp[v][i] = 0; for (int i = 0; i <= c; i++) { for (int j = 0; j <= c; j++) { dp[v][min(i + j, c)] = (dp[v][min(i + j, c)] + dp[2 * v][i] * dp[2 * v + 1][j]) % MOD; } } } void build(int v, int l, int r) { if (l == r) { dp[v][0] = b[l] % MOD; dp[v][1] = a[l] % MOD; return; } int mid = (l + r) / 2; build(2 * v, l, mid); build(2 * v + 1, mid + 1, r); memo(v); } void update(int v, int l, int r, int k) { if (l == r) { dp[v][0] = b[l] % MOD; dp[v][1] = a[l] % MOD; return; } int mid = (l + r) / 2; if (k <= mid)update(2 * v, l, mid, k); else update(2 * v + 1, mid + 1, r, k); memo(v); } void solve() { cin >> n >> c; for (int i = 1; i <= n; i++)cin >> a[i]; for (int i = 1; i <= n; i++)cin >> b[i]; build(1, 1, n); int q; cin >> q; while (q--) { ll p, A, B; cin >> p >> A >> B; a[p] = A; b[p] = B; update(1, 1, n, p); cout << dp[1][c] << "\n"; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t = 1;// cin >> t; while (t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...