제출 #1369932

#제출 시각아이디문제언어결과실행 시간메모리
1369932mohammadyayRelativnost (COCI15_relativnost)C++20
140 / 140
3981 ms24076 KiB
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<ll, null_type, less_equal<ll>, rb_tree_tag,tree_order_statistics_node_update>
#define endl '\n'
using ll = int;
#define pb push_back
#define eb emplace_back
#define pF first
#define pS second
#define SP << " " <<
const ll mod7 = 10007;
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
ll a[112345], b[112345];
struct segmentTree {
    vector<vector<short>> v;
    vector<short> merged;
    ll offset;
    segmentTree(ll n) {
        offset = 1;
        while (offset<n) offset*=2;
        v.resize(offset*2, vector<short>(23, 0));
        merged.resize(23, 0);
        for (auto &i : v) i[0] = 1;
    }

    void merge(vector<short> &x, vector<short> &y) {
        for (int i = 0; i <= 21; i++) {
            for (int j = 0; j <= 21; j++) {
                merged[min(21,i+j)] += ((long long)x[i] * (long long)y[j])%mod7, merged[min(21, i+j)] %= mod7;
            }
        }
    }

    void upd(ll i, ll x, ll y) {
        i += offset;
        v[i][0] = y, v[i][1] = x;
        while (i/=2) {
            for (int j = 0; j<=21; j++) merged[j] = 0;
            merge(v[i * 2], v[i * 2 + 1]);
            v[i] = merged;
        }
    }

    ll query(ll c) {
        ll ans = 0;
        for (int i = c; i <= 21; i++) {ans += v[1][i], ans %= mod7;}
        return ans;
    }
};
int main() {
    ios::sync_with_stdio(0); cout.tie(0); cin.tie(0);
    ll n, c; cin>>n>>c;
    for (int i=1; i<=n; i++) {long long x; cin>>x; a[i] = x%mod7;}
    for (int i=1; i<=n; i++) {long long x; cin>>x; b[i] = x%mod7;}
    segmentTree tree(n);
    for (int i=1; i<=n; i++) tree.upd(i-1, a[i], b[i]);

    ll q; cin>>q;
    while (q--) {
        ll i, x, y; cin>>i>>x>>y;
        tree.upd(i-1, x%mod7, y%mod7);
        cout << tree.query(c) << endl;
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…