Submission #65018

#TimeUsernameProblemLanguageResultExecution timeMemory
65018forestryksRelativnost (COCI15_relativnost)C++14
140 / 140
2879 ms26080 KiB
/////////////////////////////////////////////////////////////////////////////////////////////// #include <bits/stdc++.h> using namespace std; // #define int long long #define FAST_IO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) #define FILE_IO(x) freopen((string(x) + ".in").c_str(), "r", stdin); freopen((string(x) + ".out").c_str(), "w", stdout) #define f first #define s second #define x1 x1qwer #define y1 y1qwer #define right right123 #define left left123 #define foreach(it, v) for (auto it : v) #define rep(it, n) for (int it = 0; it < n; ++it) #define forin(it, l, r) for (int it = l; it < r; ++it) #define all(x) x.begin(), x.end() typedef long long ll; typedef unsigned long long ull; typedef double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const double DINF = numeric_limits<double>::infinity(); const ll MOD = 1e9 + 7; const double EPS = 1e-7; ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; } mt19937 mmtw_(MOD); uniform_int_distribution<ll> rd_; ll randomll() { return rd_(mmtw_);} ll rnd(ll x, ll y) { return rd_(mmtw_) % (y - x + 1) + x; } template <class T> T fact(T n) { if (n == 1) return 1; return n * fact(n - 1); } //////////////////////////////////////////////////////////////////////////////////////////////// const int mod = 10007; const int MAXN = 1e5 + 5; int n, c; uint a[MAXN]; uint b[MAXN]; uint t[MAXN * 4][21]; void upd(int v) { fill(t[v], t[v] + c + 1, 0); int left = v * 2 + 1; int right = v * 2 + 2; for (int i = 0; i <= c; ++i) { for (int j = 0; j <= c; ++j) { t[v][min(i + j, c)] += t[left][i] * t[right][j]; if (t[v][min(i + j, c)] > 1e9) t[v][min(i + j, c)] %= mod; // t[v][min(i + j, c)] %= mod; } } for (int i = 0; i <= c; ++i) { t[v][i] %= mod; } } void build(int v, int tl, int tr) { if (tr - tl == 1) { t[v][0] = b[tl]; t[v][1] = a[tl]; return; } int tm = tl + (tr - tl) / 2; build(v * 2 + 1, tl, tm); build(v * 2 + 2, tm, tr); upd(v); } void update(int v, int tl, int tr, int p) { if (tr - tl == 1) { t[v][0] = b[tl]; t[v][1] = a[tl]; return; } int tm = tl + (tr - tl) / 2; if (p < tm) { update(v * 2 + 1, tl, tm, p); } else { update(v * 2 + 2, tm, tr, p); } upd(v); } int main() { FAST_IO; cin >> n >> c; rep(i, n) { cin >> a[i]; a[i] %= mod; } rep(i, n) { cin >> b[i]; b[i] %= mod; } build(0, 0, n); int q; cin >> q; while (q--) { int p, aa, bb; cin >> p >> aa >> bb; p--; aa %= mod; bb %= mod; a[p] = aa; b[p] = bb; update(0, 0, n, p); cout << t[0][c] << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...