# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
38867 |
2018-01-07T12:03:51 Z |
14kg |
Horses (IOI15_horses) |
C++11 |
|
496 ms |
19268 KB |
#include "horses.h"
#define MOD 1000000007
#define N 500001
#define NN 1048576
struct NUM {
bool big_num;
int num;
void push(bool _big_num, int _num) {
big_num = _big_num, num = _num;
}
} tree1[NN], one;
int n, nn, tree2[NN], Y[N];
NUM mul(NUM x, NUM y) {
long long tx = x.num, ty = y.num, temp = (tx*ty) % MOD;
NUM res;
res.push(tx*ty >= MOD, (int)temp);
return res;
}
long long ll_mul(long long x, long long y) {
return x*y;
}
NUM get_tree1(int lev, int l, int r, int x, int y) {
int mid = (l + r) / 2;
if (x <= l && r <= y) return tree1[lev];
if (r < x || y < l) return one;
return mul(get_tree1(lev * 2, l, mid, x, y), get_tree1(lev * 2 + 1, mid + 1, r, x, y));
}
void tree1_update(int lev) {
tree1[lev] = mul(tree1[lev * 2], tree1[lev * 2 + 1]);
if (lev > 1) tree1_update(lev / 2);
}
void tree2_update(int lev) {
int l = lev * 2, r = lev * 2 + 1;
NUM temp = get_tree1(1, 1, nn, tree2[l] + 1, tree2[r]);
if (temp.big_num || (long long)Y[tree2[l]] <= ll_mul(temp.num, Y[tree2[r]])) tree2[lev] = tree2[r];
else tree2[lev] = tree2[l];
if (lev > 1) tree2_update(lev / 2);
}
int output() {
long long out = ll_mul(get_tree1(1, 1, nn, 1, tree2[1]).num, Y[tree2[1]]);
return (int)(out%MOD);
}
int init(int _n, int *in_x, int *in_y) {
NUM temp;
n = _n, one.push(false, 1);
for (nn = 1; nn < n; nn *= 2);
for (int i = 0; i < n; i++) {
tree1[nn + i].push(false, in_x[i]);
tree2[nn + i] = i + 1;
Y[i + 1] = in_y[i];
}
for (int i = nn - 1; i >= 1; i--) tree1[i] = mul(tree1[i * 2], tree1[i * 2 + 1]);
for (int i = nn - 1; i >= 1; i--) {
int l = i * 2, r = i * 2 + 1;
temp = get_tree1(1, 1, nn, tree2[l] + 1, tree2[r]);
if (temp.big_num || (long long)Y[tree2[l]] <= ll_mul(temp.num, Y[tree2[r]])) tree2[i] = tree2[r];
else tree2[i] = tree2[l];
}
return output();
}
int updateX(int pos, int val) {
tree1[nn + pos].push(false, val);
tree1_update((nn + pos) / 2), tree2_update((nn + pos) / 2);
return output();
}
int updateY(int pos, int val) {
Y[pos + 1] = val;
tree2_update((nn + pos) / 2);
return output();
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
15356 KB |
Output is correct |
2 |
Correct |
0 ms |
15356 KB |
Output is correct |
3 |
Correct |
0 ms |
15356 KB |
Output is correct |
4 |
Correct |
0 ms |
15356 KB |
Output is correct |
5 |
Correct |
0 ms |
15356 KB |
Output is correct |
6 |
Correct |
0 ms |
15356 KB |
Output is correct |
7 |
Correct |
0 ms |
15356 KB |
Output is correct |
8 |
Correct |
0 ms |
15356 KB |
Output is correct |
9 |
Correct |
0 ms |
15356 KB |
Output is correct |
10 |
Correct |
0 ms |
15356 KB |
Output is correct |
11 |
Correct |
0 ms |
15356 KB |
Output is correct |
12 |
Correct |
0 ms |
15356 KB |
Output is correct |
13 |
Correct |
0 ms |
15356 KB |
Output is correct |
14 |
Correct |
0 ms |
15356 KB |
Output is correct |
15 |
Correct |
0 ms |
15356 KB |
Output is correct |
16 |
Correct |
0 ms |
15356 KB |
Output is correct |
17 |
Correct |
0 ms |
15356 KB |
Output is correct |
18 |
Correct |
0 ms |
15356 KB |
Output is correct |
19 |
Correct |
0 ms |
15356 KB |
Output is correct |
20 |
Correct |
0 ms |
15356 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
15356 KB |
Output is correct |
2 |
Correct |
0 ms |
15356 KB |
Output is correct |
3 |
Correct |
0 ms |
15356 KB |
Output is correct |
4 |
Correct |
0 ms |
15356 KB |
Output is correct |
5 |
Correct |
0 ms |
15356 KB |
Output is correct |
6 |
Correct |
0 ms |
15356 KB |
Output is correct |
7 |
Correct |
0 ms |
15356 KB |
Output is correct |
8 |
Correct |
0 ms |
15356 KB |
Output is correct |
9 |
Correct |
0 ms |
15356 KB |
Output is correct |
10 |
Correct |
0 ms |
15356 KB |
Output is correct |
11 |
Correct |
0 ms |
15356 KB |
Output is correct |
12 |
Correct |
0 ms |
15356 KB |
Output is correct |
13 |
Correct |
0 ms |
15356 KB |
Output is correct |
14 |
Correct |
0 ms |
15356 KB |
Output is correct |
15 |
Correct |
0 ms |
15356 KB |
Output is correct |
16 |
Correct |
0 ms |
15356 KB |
Output is correct |
17 |
Correct |
0 ms |
15356 KB |
Output is correct |
18 |
Correct |
0 ms |
15356 KB |
Output is correct |
19 |
Correct |
0 ms |
15356 KB |
Output is correct |
20 |
Correct |
0 ms |
15356 KB |
Output is correct |
21 |
Correct |
0 ms |
15356 KB |
Output is correct |
22 |
Correct |
0 ms |
15356 KB |
Output is correct |
23 |
Correct |
3 ms |
15356 KB |
Output is correct |
24 |
Correct |
0 ms |
15356 KB |
Output is correct |
25 |
Incorrect |
0 ms |
15356 KB |
Output isn't correct |
26 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
496 ms |
19268 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
15356 KB |
Output is correct |
2 |
Correct |
0 ms |
15356 KB |
Output is correct |
3 |
Correct |
0 ms |
15356 KB |
Output is correct |
4 |
Correct |
0 ms |
15356 KB |
Output is correct |
5 |
Correct |
0 ms |
15356 KB |
Output is correct |
6 |
Correct |
0 ms |
15356 KB |
Output is correct |
7 |
Correct |
0 ms |
15356 KB |
Output is correct |
8 |
Correct |
0 ms |
15356 KB |
Output is correct |
9 |
Correct |
0 ms |
15356 KB |
Output is correct |
10 |
Correct |
0 ms |
15356 KB |
Output is correct |
11 |
Correct |
0 ms |
15356 KB |
Output is correct |
12 |
Correct |
0 ms |
15356 KB |
Output is correct |
13 |
Correct |
0 ms |
15356 KB |
Output is correct |
14 |
Correct |
0 ms |
15356 KB |
Output is correct |
15 |
Correct |
0 ms |
15356 KB |
Output is correct |
16 |
Correct |
0 ms |
15356 KB |
Output is correct |
17 |
Correct |
0 ms |
15356 KB |
Output is correct |
18 |
Correct |
0 ms |
15356 KB |
Output is correct |
19 |
Correct |
0 ms |
15356 KB |
Output is correct |
20 |
Correct |
0 ms |
15356 KB |
Output is correct |
21 |
Correct |
0 ms |
15356 KB |
Output is correct |
22 |
Correct |
0 ms |
15356 KB |
Output is correct |
23 |
Correct |
0 ms |
15356 KB |
Output is correct |
24 |
Correct |
3 ms |
15356 KB |
Output is correct |
25 |
Incorrect |
0 ms |
15356 KB |
Output isn't correct |
26 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
15356 KB |
Output is correct |
2 |
Correct |
0 ms |
15356 KB |
Output is correct |
3 |
Correct |
0 ms |
15356 KB |
Output is correct |
4 |
Correct |
0 ms |
15356 KB |
Output is correct |
5 |
Correct |
0 ms |
15356 KB |
Output is correct |
6 |
Correct |
0 ms |
15356 KB |
Output is correct |
7 |
Correct |
0 ms |
15356 KB |
Output is correct |
8 |
Correct |
0 ms |
15356 KB |
Output is correct |
9 |
Correct |
0 ms |
15356 KB |
Output is correct |
10 |
Correct |
0 ms |
15356 KB |
Output is correct |
11 |
Correct |
0 ms |
15356 KB |
Output is correct |
12 |
Correct |
0 ms |
15356 KB |
Output is correct |
13 |
Correct |
0 ms |
15356 KB |
Output is correct |
14 |
Correct |
0 ms |
15356 KB |
Output is correct |
15 |
Correct |
0 ms |
15356 KB |
Output is correct |
16 |
Correct |
0 ms |
15356 KB |
Output is correct |
17 |
Correct |
0 ms |
15356 KB |
Output is correct |
18 |
Correct |
0 ms |
15356 KB |
Output is correct |
19 |
Correct |
0 ms |
15356 KB |
Output is correct |
20 |
Correct |
0 ms |
15356 KB |
Output is correct |
21 |
Correct |
0 ms |
15356 KB |
Output is correct |
22 |
Correct |
0 ms |
15356 KB |
Output is correct |
23 |
Correct |
3 ms |
15356 KB |
Output is correct |
24 |
Correct |
0 ms |
15356 KB |
Output is correct |
25 |
Incorrect |
0 ms |
15356 KB |
Output isn't correct |
26 |
Halted |
0 ms |
0 KB |
- |