# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
93645 | ajmasin | Relativnost (COCI15_relativnost) | C++14 | 4078 ms | 9204 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 = 25;
const int offset = (1<<17);
const int mod = 10007;
int n, c, q;
int niza[maxn];
int nizb[maxn];
int add(int a, int b)
{
a += b;
if(a >= mod) a -= mod;
if(a < 0) a += mod;
return a;
}
int mult(int a, int b)
{
return a * b % mod;
}
struct tournament
{
int brn[maxc][2 * offset];
void update(int cvor)
{
REP(i, 0, c + 1) brn[i][cvor] = 0;
REP(i, 0, c + 1)
{
REP(j, 0, c + 1)
{
int suma = min(i + j, c);
brn[suma][cvor] = add(brn[suma][cvor], mult(brn[i][cvor * 2], brn[j][cvor * 2 + 1]));
}
}
//REP(i, 0, c + 1) cout << brn[i][cvor] << " ";
//cout << endl;
return;
}
}T;
int main()
{
for(int i = 2 * offset - 1; i > 0; i--) T.brn[0][i] = 1;
scanf("%d%d", &n, &c);
int a, b;
REP(i, 0, n)
{
scanf("%d", &niza[i]);
niza[i] %= mod;
}
REP(i, 0, n)
{
scanf("%d", &nizb[i]);
nizb[i] %= mod;
}
REP(i, 0, n)
{
T.brn[0][i + offset] = nizb[i];
T.brn[1][i + offset] = niza[i];
int up = (i + offset) / 2;
while(up)
{
T.update(up);
up /= 2;
}
}
scanf("%d", &q);
int p;
REP(i, 0, q)
{
scanf("%d%d%d", &p, &a, &b);
a %= mod;
b %= mod;
p--;
T.brn[0][p + offset] = b;
T.brn[1][p + offset] = a;
p += offset;
p /= 2;
while(p)
{
T.update(p);
p /= 2;
}
printf("%d\n", T.brn[c][1]);
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |