답안 #371259

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
371259 2021-02-26T10:07:18 Z Atill83 Relativnost (COCI15_relativnost) C++14
42 / 140
3916 ms 25460 KB
#include <bits/stdc++.h>
#define ff first
#define ss second
#define endl '\n'
using namespace std;
const long long INF = (long long) 1e18;
const int mod = (int) 1e4+7;
const int MAXN = (int) 1e5+5;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
int n, c;
int a[MAXN], b[MAXN];


int t[4*MAXN][21];

void build(int v, int tl, int tr){
    if(tl == tr){
        t[v][0] = b[tl];
        t[v][1] = a[tl];
    }else{
        int tm = (tl + tr) / 2;
        build(2*v, tl, tm);
        build(2*v + 1, tm + 1, tr);
        for(int j = 0; j <= c; j++)
            t[v][j] = 0;
        for(int i = 0; i <= c; i++){
            for(int j = 0; j <= c; j++){
                t[v][min(c, (i + j))] = (t[v][min(c, (i + j))] + t[2*v][i] * t[2*v + 1][j] % mod) % mod;
            }
        }
    }
}

void upd(int v, int tl, int tr, int pos){
    if(tl == tr){
        t[v][0] = b[tl];
        t[v][1] = a[tl];
    }else{
        int tm = (tl + tr) / 2;
        if(pos <= tm)
            upd(2*v, tl, tm, pos);
        else
            upd(2*v + 1, tm + 1, tr, pos);
        for(int j = 0; j <= c; j++)
            t[v][j] = 0;
        for(int i = 0; i <= c; i++){
            for(int j = 0; j <= c; j++){
                t[v][min(c, (i + j))] = (t[v][min(c, (i + j))] + t[2*v][i] * t[2*v + 1][j] % mod) % mod;
            }
        }
    }
}


int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);

    #ifdef Local
        freopen("C:/Users/Admin/Desktop/Yazilim/C/IO/int.txt","r",stdin);
        freopen("C:/Users/Admin/Desktop/Yazilim/C/IO/out.txt","w",stdout);
    #endif

    cin>>n>>c;

    for(int i = 0; i < n; i++)
        cin>>a[i];   
    for(int i = 0; i < n; i++)
        cin>>b[i];

    build(1, 0, n - 1);
 
    int q;
    cin>>q;

    for(int i = 0; i < q; i++){
        int idx;
        cin>>idx;
        idx--;
        cin>>a[idx]>>b[idx];
        a[idx] %= mod;
        b[idx] %= mod;
        upd(1, 0, n - 1, idx);
        cout<<t[1][c]<<endl;
    }

    #ifdef Local
        cout<<endl<<fixed<<setprecision(2)<<1000.0 * clock() / CLOCKS_PER_SEC<< " milliseconds ";
    #endif
}
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 492 KB Output is correct
2 Correct 14 ms 492 KB Output is correct
3 Correct 29 ms 492 KB Output is correct
4 Incorrect 471 ms 11884 KB Output isn't correct
5 Incorrect 1684 ms 24172 KB Output isn't correct
6 Incorrect 2448 ms 24556 KB Output isn't correct
7 Incorrect 1067 ms 12524 KB Output isn't correct
8 Incorrect 539 ms 22892 KB Output isn't correct
9 Incorrect 1016 ms 24172 KB Output isn't correct
10 Incorrect 3916 ms 25460 KB Output isn't correct