Submission #1297297

#TimeUsernameProblemLanguageResultExecution timeMemory
1297297tabRelativnost (COCI15_relativnost)C++20
56 / 140
2925 ms58776 KiB
#include "bits/stdc++.h" using namespace std; #define intt long long #define fi first #define se second const intt mxN = 1e5 + 5; const intt LG = 20; const intt inf = 1e18; const intt mod = 10007; vector<vector<intt>> seg; vector<intt> a(mxN), b(mxN); intt n, c, q; void build(intt node, intt l, intt r) { if(l == r) { seg[0][node] = b[l] % mod; seg[1][node] = a[l] % mod; return; } intt mid = (l + r) / 2; build(node * 2, l, mid); build(node * 2 + 1, mid + 1, r); \ for(intt sol = 0; sol <= c; sol++) { for(intt sag = 0; sag <= c; sag++) { intt cnt = min(sol + sag, c); seg[cnt][node] += ((seg[sol][node * 2] * seg[sag][node * 2 + 1]) % mod); seg[cnt][node] %= mod; // cout << node << " " << cnt << ": " << seg[cnt][node] << endl; } } } void update(intt node, intt l, intt r, intt pos, intt aval, intt bval) { if(l == r) { seg[0][node] = bval % mod; seg[1][node] = aval % mod; return; } intt mid = (l + r) / 2; if(pos <= mid) { update(node * 2, l, mid, pos, aval, bval); } else { update(node * 2 + 1, mid + 1, r, pos, aval, bval); } for(intt C = 0; C <= c; C++) seg[C][node]=0; for(intt sol = 0; sol <= c; sol++) { for(intt sag = 0; sag <= c; sag++) { intt cnt = min(sol + sag, c); seg[cnt][node] += ((seg[sol][node * 2] * seg[sag][node * 2 + 1]) % mod); seg[cnt][node] %= mod; } } } intt get(intt node, intt l, intt r, intt ql, intt qr) { if(ql > r || qr < l || ql > qr) return 0ll; if(ql <= l && r <= qr) { return seg[c][node] % mod; } intt mid = (l + r) / 2; return get(node * 2, l, mid, ql, qr) + get(node * 2 + 1, mid + 1, r, ql, qr); } void _() { cin >> n >> c; seg.assign(c + 1, vector<intt>(4 * n + 1, 0ll)); a.resize(n+1); b.resize(n + 1); for(intt i = 1; i <= n; i++) cin >> a[i]; for(intt i = 1; i <= n; i++) cin >> b[i]; build(1, 1, n); cin >> q; while(q--) { intt idx, av, bv; cin >> idx >> av >> bv; update(1, 1, n, idx, av, bv); cout << get(1, 1, n, 1, n) << endl; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); intt t = 1, buu = 1; // cin >> t; while(t--){ // cout << "Case #" << buu++ << ": "; _(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...