Submission #93653

#TimeUsernameProblemLanguageResultExecution timeMemory
93653ajmasinRelativnost (COCI15_relativnost)C++14
140 / 140
2253 ms23032 KiB
#include <bits/stdc++.h> using namespace std; #define REP(i, a, b) for(int i = a; i < b; i++) const int maxn = 100100; const int maxc = 21; const int offset = (1<<17); const int mod = 10007; int n, c, q; int niza[maxn]; int nizb[maxn], suma[maxc][maxc]; inline int add(const int &a,const int &b) { if(a + b >= mod) return a + b - mod; return a + b; } inline int mult(const int &a,const int &b) { return a * b % mod; } struct tournament { int brn[2 * offset][maxc]; void update(int cvor) { REP(i, 0, c + 1) brn[cvor][i] = 0; REP(i, 0, c + 1) { REP(j, 0, c + 1) { brn[cvor][suma[i][j]] = add(brn[cvor][suma[i][j]], mult(brn[cvor * 2][i], brn[cvor * 2 + 1][j])); } } return; } }T; bool ok(char znak) { if (znak >= '0' && znak <= '9') return 1; return 0; } int dajbroj() { int ret = 0; char in; while(!ok(in = getchar_unlocked())); ret += in - '0'; while(ok(in = getchar_unlocked())) { ret *= 10; ret += in - '0'; } return ret; } int main() { for(int i = 2 * offset - 1; i >= offset; i--) T.brn[i][0] = 1; n = dajbroj(); c = dajbroj(); for(int i = 0;i<=c;i++){ for(int j = 0;j<=c;j++) { suma[i][j] = min(i + j, c); } } int a, b; REP(i, 0, n) { //scanf("%d", &niza[i]); niza[i] = dajbroj(); niza[i] %= mod; } REP(i, 0, n) { //scanf("%d", &nizb[i]); nizb[i] = dajbroj(); nizb[i] %= mod; } REP(i, 0, n) { T.brn[i + offset][0] = nizb[i]; T.brn[i + offset][1] = niza[i]; } for(int i = offset - 1; i > 0; i--) T.update(i); q = dajbroj(); int p; REP(i, 0, q) { //scanf("%d%d%d", &p, &a, &b); p = dajbroj(); a = dajbroj(); b = dajbroj(); a %= mod; b %= mod; p--; T.brn[p + offset][0] = b; T.brn[p + offset][1] = a; p += offset; p /= 2; while(p) { T.update(p); p /= 2; } printf("%d\n", T.brn[1][c]); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...