답안 #251775

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
251775 2020-07-22T09:52:40 Z ne4eHbKa Relativnost (COCI15_relativnost) C++17
0 / 140
30 ms 1920 KB
//{ <defines>
#include <bits/stdc++.h>
using namespace std;

//#pragma comment(linker, "/stack:200000000")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,-O3")

#define fr(i, n) for(int i = 0; i < n; ++i)
#define fo(n) fr(i, n)

#define re return
#define ef else if
#define ifn(x) if(!(x))
#define _  << ' ' <<

#define ft first
#define sd second
#define ve vector
#define pb push_back
#define eb emplace_back

#define sz(x) int((x).size())
#define bnd(x) x.begin(), x.end()
#define clr(x, y) memset((x), (y), sizeof (x))

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef ve<int> vi;

inline ll time() {re chrono :: system_clock().now().time_since_epoch().count();}
mt19937 rnd(time());
mt19937_64 RND(time());

template<typename t> inline void umin(t &a, t b) {a = min(a, b);}
template<typename t> inline void umax(t &a, t b) {a = max(a, b);}

int md = 998244353;

inline int m_add(int&a, int b) {a += b; if(a < 0) a += md; if(a >= md) a -= md; re a;}
inline int m_sum(int a, int b) {a += b; if(a < 0) a += md; if(a >= md) a -= md; re a;}
inline int m_mul(int&a, int b) {re a = 1ll * a * b % md;}
inline int m_prod(int a, int b) {re 1ll * a * b % md;}

int m_bpow(ll A, ll b) {
    int a = A % md;
    ll ans = 1;
    for(ll p = 1ll << 63 - __builtin_clzll(b); p; p >>= 1) {
        (ans *= ans) %= md;
        if(p & b)
            (ans *= a) %= md;
    }
    re ans;
}

//const ld pi = arg(complex<ld>(-1, 0));
//const ld pi2 = pi + pi;
const int oo = 2e9;
const ll OO = 4e18;
//} </defines>
const int N = 1e5 + 5;
const short smd = 1e4 + 7;

int n, c, q;
int a[N], b[N];

void *mptr;

inline void* getmem(size_t f) {
    void* res = mptr;
    mptr += f;
    return res;
}

struct tree {
    short *v;
    tree *l, *r;
    void merge(int ul, int ur, bool cl = false) {
        if(!cl) memset(v, 0, min(c, ul + ur) + 1 << 1);
        short *fi = l->v, *se;
        for(int i = 0, j; i <= min(ul, c); ++i, ++fi) {
            if(!*fi) continue;
            se = r->v;
            for(j = 0; j <= min(ur, c); ++j, ++se) {
                if(!*se) continue;
                short &t = v[min(c, i + j)];
                t += *fi * *se % md;
                if(t >= smd) t -= smd;
            }
        }
    }
    void init(int tl = 0, int tr = n - 1) {
        v = (short*) getmem(min(c + 1, tr - tl + 2) << 1);
        if(tl < tr) {
            int tm = tl + tr >> 1;
            l = (tree*) getmem(12); l->init(tl, tm);
            r = (tree*) getmem(12); r->init(tm + 1, tr);
            merge(tm - tl + 1, tr - tm, true);
        } else {
            v[0] = b[tl];
            v[1] = a[tl];
        }
    }
    void upd(int i, int tl = 0, int tr = n - 1) {
        if(tl == tr) {
            v[0] = b[tl];
            v[1] = a[tl];
            return;
        }
        int tm = tl + tr >> 1;
        i <= tm ? l->upd(i, tl, tm)
                : r->upd(i, tm + 1, tr);
        merge(tm - tl + 1, tr - tm);
    }
};

void solve() {
    md = 1e4 + 7;
    mptr = malloc(21 * 1024 * 1024);
    cin >> n >> c;
    fo(n) cin >> a[i], a[i] %= md;
    fo(n) cin >> b[i], b[i] %= md;
    tree *t = (tree*) getmem(12); t->init();
    cin >> q;
    while(q--) {
        int i, na, nb; cin >> i >> na >> nb;
        if(c > n) {
            cout << "0\n";
            continue;
        }
        na %= md, nb %= md, --i;
        a[i] = na, b[i] = nb;
        t->upd(i);
        cout << t->v[c] << '\n';
    }
}

int main() {
#ifdef _LOCAL
    freopen("in.txt", "r", stdin);
    int tests; cin >> tests;
    for(int test = 1; test <= tests; ++test) {
		cerr << "case #" << test << endl;
        solve();
        cerr << endl;
    }
#else
//    freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
    ios_base :: sync_with_stdio(0); cin.tie(0); cout.tie(0);
    solve();
#endif
    return 0;
}

Compilation message

relativnost.cpp: In function 'int m_bpow(ll, ll)':
relativnost.cpp:50:26: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
     for(ll p = 1ll << 63 - __builtin_clzll(b); p; p >>= 1) {
                       ~~~^~~~~~~~~~~~~~~~~~~~
relativnost.cpp: In function 'void* getmem(size_t)':
relativnost.cpp:73:10: warning: pointer of type 'void *' used in arithmetic [-Wpointer-arith]
     mptr += f;
     ~~~~~^~~~
relativnost.cpp: In member function 'void tree::merge(int, int, bool)':
relativnost.cpp:81:46: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
         if(!cl) memset(v, 0, min(c, ul + ur) + 1 << 1);
                              ~~~~~~~~~~~~~~~~^~~
relativnost.cpp: In member function 'void tree::init(int, int)':
relativnost.cpp:97:25: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
             int tm = tl + tr >> 1;
                      ~~~^~~~
relativnost.cpp: In member function 'void tree::upd(int, int, int)':
relativnost.cpp:112:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
         int tm = tl + tr >> 1;
                  ~~~^~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2 ms 512 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Runtime error 2 ms 512 KB Execution killed with signal 11 (could be triggered by violating memory limits)
3 Runtime error 2 ms 512 KB Execution killed with signal 11 (could be triggered by violating memory limits)
4 Runtime error 17 ms 1408 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Runtime error 29 ms 1912 KB Execution killed with signal 11 (could be triggered by violating memory limits)
6 Runtime error 28 ms 1920 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Runtime error 21 ms 1536 KB Execution killed with signal 11 (could be triggered by violating memory limits)
8 Runtime error 30 ms 1912 KB Execution killed with signal 11 (could be triggered by violating memory limits)
9 Runtime error 24 ms 1664 KB Execution killed with signal 11 (could be triggered by violating memory limits)
10 Runtime error 23 ms 1664 KB Execution killed with signal 11 (could be triggered by violating memory limits)