Submission #246251

#TimeUsernameProblemLanguageResultExecution timeMemory
246251bibabasRelativnost (COCI15_relativnost)C++14
0 / 140
4101 ms23932 KiB
#include <bits/stdc++.h> #define ll long long #define ull unsigned ll #define vi vector<ll> #define vvi vector<vi> #define all(x) x.begin(), x.end() #define pb push_back #define mp make_pair #define ld long double #define pii pair<ll, ll> #define mt make_tuple #define mn(a, b) a = min(a, b) #define mx(a, b) a = max(a, b) using namespace std; const ll INF = (ll)2e9; const ll inf = (ll)2e18; const ld eps = (ld)1e-8; const ll mod = (ll)10007; const ll MAXN = (ll)1e4 + 1; const ll MAXC = (ll)1e6 + 1; const ll MAXE = (ll)1000; const ll MAXLOG = 21; const ll maxlen = (ll)1e5; const ll asci = (ll)256; const ll block = 480; const ld PI = acos(-1); const ld e = 2.7182818284; /*#include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; typedef tree< pii, null_type, less<pii>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;*/ template <class T> istream& operator >>(istream &in, vector<T> &arr){ for (T &cnt : arr) { in >> cnt; } return in; }; template<class T> istream& operator >>(istream &in, pair<T, T> &p) { in >> p.first; in >> p.second; return in; }; int c; int t[400000][21]; void merge(int v) { for (int i = 0; i <= 20; ++i) t[v][i] = 0; for (int i = 0; i <= 20; ++i) { for (int j = 0; j <= 20; ++j) { t[v][min(c, i + j)] += (t[2 * v][i] * t[2 * v + 1][j]) % mod; t[v][min(c, i + j)] %= mod; } } } void build(int v, int tl, int tr, vector<pii> &a) { if (tl + 1 == tr) { t[v][1] = a[tl].first, t[v][0] = a[tl].second; return; } int tm = (tl + tr) / 2; build(2 * v, tl, tm, a); build(2 * v + 1, tm, tr, a); merge(v); } void upd(int v, int tl, int tr, int pos, pii val) { if (tl + 1 == tr) { t[v][1] = val.first, t[v][0] = val.second; return; } int tm = (tl + tr) / 2; if (pos < tm) upd(2 * v, tl, tm, pos, val); else upd(2 * v + 1, tm, tr, pos, val); merge(v); } void solve() { int n; cin >> n >> c; vector<pii> a(n); cin >> a; build(1, 0, n, a); int q; cin >> q; while (q--) { int pos; pii a; cin >> pos >> a; pos--; upd(1, 0, n, pos, a); cout << t[1][c] << "\n"; } } int main() { srand(time(0)); #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #else ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #endif cout.precision(30); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...