// In the name of Allah
#include <bits/stdc++.h>
#include "horses.h"
using namespace std;
typedef long long int ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef complex<ld> cld;
#define all(x) (x).begin(),(x).end()
#define len(x) ((ll) (x).size())
#define F first
#define S second
#define pb push_back
#define sep ' '
#define endl '\n'
#define Mp make_pair
#define kill(x) cout << x << '\n', exit(0)
#define set_dec(x) cout << fixed << setprecision(x);
#define file_io(x,y) freopen(x, "r", stdin); freopen(y, "w", stdout);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
struct node {
ll mul, val, valx;
ll ans, ansx;
};
const int maxn = (1 << 19) + 4;
const int maxlg = 20;
const int mod = 1e9 + 7;
const ll oo = 1e9 + 7;
int n; pll A[maxn];
node t[2 * maxn], ca;
int R; ll valx;
node f(node a, node b) {
node res;
res.mul = a.mul * b.mul % mod;
res.val = min(oo, a.val * b.val);
res.ans = min(oo, max(a.ans, a.val * b.ans));
res.valx = a.valx * b.valx;
res.ansx = max(a.ansx, a.valx * b.ansx);
return res;
}
void build(int v, int tl, int tr) {
if (tr - tl == 1) {
t[v].mul = A[tl].F; t[v].val = A[tl].F; t[v].valx = A[tl].F;
t[v].ans = min(oo, A[tl].F * A[tl].S);
t[v].ansx = A[tl].F * A[tl].S;
return ;
}
int mid = (tl + tr) / 2;
build(2 * v + 1, tl, mid); build(2 * v + 2, mid, tr);
t[v] = f(t[2 * v + 1], t[2 * v + 2]);
}
void upd(int v, int tl, int tr, int i) {
if (i >= tr || i < tl) return ;
if (tr - tl == 1) {
t[v].mul = A[tl].F; t[v].val = A[tl].F; t[v].valx = A[tl].F;
t[v].ans = min(oo, A[tl].F * A[tl].S);
t[v].ansx = A[tl].F * A[tl].S;
return ;
}
int mid = (tl + tr) / 2;
upd(2 * v + 1, tl, mid, i); upd(2 * v + 2, mid, tr, i);
t[v] = f(t[2 * v + 1], t[2 * v + 2]);
}
pll get_ind(int v, int tl, int tr) {
node res = ca;
while (tr - tl > 1) {
int mid = (tl + tr) / 2;
node resx = f(t[2 * v + 2], res);
if (resx.ans < oo) {
res = resx;
v = 2 * v + 1; tr = mid;
}
else {
v = 2 * v + 2; tl = mid;
}
}
res = f(t[v], res);
return Mp(tl, res.ansx);
}
ll get_mul(int v, int tl, int tr, int l, int r) {
l = max(l, tl); r = min(r, tr);
if (l >= tr || r <= tl) return ca.mul;
if (l == tl && r == tr) return t[v].mul;
int mid = (tl + tr) / 2;
return get_mul(2 * v + 1, tl, mid, l, r) * get_mul(2 * v + 2, mid, tr, l, r) % mod;
}
ll get_ans(int ind) {
if (ind >= R) {
auto f = get_ind(0, 0, n);
R = f.F; valx = f.S % mod;
}
return valx * get_mul(0, 0, n, 0, R) % mod;
}
int init(int N, int X[], int Y[]) {
n = N;
for (int i = 0; i < n; i++) A[i] = Mp(X[i], Y[i]);
ca.mul = 1; ca.val = 1; ca.valx = 1;
ca.ans = 1; ca.ansx = 1;
build(0, 0, n); R = -1;
return get_ans(n);
}
int updateX(int i, int val) {
A[i].F = val;
upd(0, 0, n, i);
return get_ans(i);
}
int updateY(int i, int val) {
A[i].S = val;
upd(0, 0, n, i);
return get_ans(i);
}
Compilation message
horses.cpp: In function 'll get_ans(int)':
horses.cpp:15:17: warning: conversion from 'long long int' to 'int' may change value [-Wconversion]
15 | #define F first
| ^
horses.cpp:103:9: note: in expansion of macro 'F'
103 | R = f.F; valx = f.S % mod;
| ^
horses.cpp: In function 'int init(int, int*, int*)':
horses.cpp:114:16: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
114 | return get_ans(n);
| ~~~~~~~^~~
horses.cpp: In function 'int updateX(int, int)':
horses.cpp:120:16: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
120 | return get_ans(i);
| ~~~~~~~^~~
horses.cpp: In function 'int updateY(int, int)':
horses.cpp:126:16: warning: conversion from 'll' {aka 'long long int'} to 'int' may change value [-Wconversion]
126 | return get_ans(i);
| ~~~~~~~^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2396 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
0 ms |
2396 KB |
Output is correct |
4 |
Correct |
0 ms |
2396 KB |
Output is correct |
5 |
Correct |
0 ms |
2396 KB |
Output is correct |
6 |
Correct |
1 ms |
2396 KB |
Output is correct |
7 |
Correct |
0 ms |
2392 KB |
Output is correct |
8 |
Correct |
1 ms |
2392 KB |
Output is correct |
9 |
Correct |
1 ms |
2396 KB |
Output is correct |
10 |
Correct |
0 ms |
2396 KB |
Output is correct |
11 |
Correct |
0 ms |
2396 KB |
Output is correct |
12 |
Correct |
0 ms |
2396 KB |
Output is correct |
13 |
Correct |
1 ms |
2396 KB |
Output is correct |
14 |
Correct |
0 ms |
2392 KB |
Output is correct |
15 |
Correct |
1 ms |
2492 KB |
Output is correct |
16 |
Correct |
0 ms |
2392 KB |
Output is correct |
17 |
Correct |
0 ms |
2396 KB |
Output is correct |
18 |
Correct |
0 ms |
2396 KB |
Output is correct |
19 |
Correct |
0 ms |
2396 KB |
Output is correct |
20 |
Correct |
0 ms |
2396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2396 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
0 ms |
2424 KB |
Output is correct |
4 |
Correct |
1 ms |
2396 KB |
Output is correct |
5 |
Correct |
0 ms |
2396 KB |
Output is correct |
6 |
Correct |
0 ms |
2396 KB |
Output is correct |
7 |
Correct |
1 ms |
2396 KB |
Output is correct |
8 |
Correct |
0 ms |
2396 KB |
Output is correct |
9 |
Correct |
0 ms |
2396 KB |
Output is correct |
10 |
Correct |
0 ms |
2392 KB |
Output is correct |
11 |
Correct |
0 ms |
2396 KB |
Output is correct |
12 |
Correct |
1 ms |
2396 KB |
Output is correct |
13 |
Correct |
0 ms |
2396 KB |
Output is correct |
14 |
Correct |
0 ms |
2396 KB |
Output is correct |
15 |
Correct |
1 ms |
2396 KB |
Output is correct |
16 |
Correct |
0 ms |
2396 KB |
Output is correct |
17 |
Correct |
0 ms |
2396 KB |
Output is correct |
18 |
Correct |
0 ms |
2396 KB |
Output is correct |
19 |
Correct |
0 ms |
2396 KB |
Output is correct |
20 |
Correct |
0 ms |
2396 KB |
Output is correct |
21 |
Correct |
0 ms |
2396 KB |
Output is correct |
22 |
Correct |
1 ms |
2396 KB |
Output is correct |
23 |
Correct |
1 ms |
2396 KB |
Output is correct |
24 |
Correct |
1 ms |
2396 KB |
Output is correct |
25 |
Correct |
1 ms |
2396 KB |
Output is correct |
26 |
Correct |
1 ms |
2532 KB |
Output is correct |
27 |
Correct |
1 ms |
2396 KB |
Output is correct |
28 |
Correct |
1 ms |
2396 KB |
Output is correct |
29 |
Correct |
1 ms |
2396 KB |
Output is correct |
30 |
Correct |
1 ms |
2396 KB |
Output is correct |
31 |
Correct |
1 ms |
2396 KB |
Output is correct |
32 |
Correct |
1 ms |
2396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
74 ms |
54100 KB |
Output is correct |
2 |
Correct |
134 ms |
54096 KB |
Output is correct |
3 |
Correct |
105 ms |
57952 KB |
Output is correct |
4 |
Correct |
121 ms |
61776 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2392 KB |
Output is correct |
2 |
Correct |
0 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
1 ms |
2392 KB |
Output is correct |
5 |
Correct |
0 ms |
2392 KB |
Output is correct |
6 |
Correct |
1 ms |
2396 KB |
Output is correct |
7 |
Correct |
0 ms |
2396 KB |
Output is correct |
8 |
Correct |
0 ms |
2396 KB |
Output is correct |
9 |
Correct |
1 ms |
2396 KB |
Output is correct |
10 |
Correct |
0 ms |
2396 KB |
Output is correct |
11 |
Correct |
0 ms |
2396 KB |
Output is correct |
12 |
Correct |
1 ms |
2392 KB |
Output is correct |
13 |
Correct |
0 ms |
2396 KB |
Output is correct |
14 |
Correct |
1 ms |
2396 KB |
Output is correct |
15 |
Correct |
0 ms |
2396 KB |
Output is correct |
16 |
Correct |
1 ms |
2648 KB |
Output is correct |
17 |
Correct |
1 ms |
2396 KB |
Output is correct |
18 |
Correct |
0 ms |
2396 KB |
Output is correct |
19 |
Correct |
0 ms |
2396 KB |
Output is correct |
20 |
Correct |
1 ms |
2396 KB |
Output is correct |
21 |
Correct |
1 ms |
2392 KB |
Output is correct |
22 |
Correct |
0 ms |
2396 KB |
Output is correct |
23 |
Correct |
1 ms |
2396 KB |
Output is correct |
24 |
Correct |
1 ms |
2392 KB |
Output is correct |
25 |
Correct |
1 ms |
2396 KB |
Output is correct |
26 |
Correct |
1 ms |
2396 KB |
Output is correct |
27 |
Correct |
1 ms |
2396 KB |
Output is correct |
28 |
Correct |
1 ms |
2396 KB |
Output is correct |
29 |
Correct |
1 ms |
2396 KB |
Output is correct |
30 |
Correct |
1 ms |
2396 KB |
Output is correct |
31 |
Correct |
1 ms |
2396 KB |
Output is correct |
32 |
Correct |
1 ms |
2512 KB |
Output is correct |
33 |
Correct |
46 ms |
57248 KB |
Output is correct |
34 |
Correct |
46 ms |
57168 KB |
Output is correct |
35 |
Correct |
66 ms |
64124 KB |
Output is correct |
36 |
Correct |
65 ms |
64084 KB |
Output is correct |
37 |
Correct |
40 ms |
55376 KB |
Output is correct |
38 |
Correct |
38 ms |
56148 KB |
Output is correct |
39 |
Correct |
31 ms |
55132 KB |
Output is correct |
40 |
Correct |
52 ms |
59224 KB |
Output is correct |
41 |
Correct |
35 ms |
55120 KB |
Output is correct |
42 |
Correct |
35 ms |
55384 KB |
Output is correct |
43 |
Correct |
46 ms |
59380 KB |
Output is correct |
44 |
Correct |
45 ms |
59476 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2396 KB |
Output is correct |
2 |
Correct |
0 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
0 ms |
2396 KB |
Output is correct |
5 |
Correct |
0 ms |
2396 KB |
Output is correct |
6 |
Correct |
0 ms |
2472 KB |
Output is correct |
7 |
Correct |
1 ms |
2396 KB |
Output is correct |
8 |
Correct |
1 ms |
2396 KB |
Output is correct |
9 |
Correct |
1 ms |
2396 KB |
Output is correct |
10 |
Correct |
1 ms |
2396 KB |
Output is correct |
11 |
Correct |
1 ms |
2396 KB |
Output is correct |
12 |
Correct |
1 ms |
2396 KB |
Output is correct |
13 |
Correct |
0 ms |
2396 KB |
Output is correct |
14 |
Correct |
1 ms |
2396 KB |
Output is correct |
15 |
Correct |
1 ms |
2396 KB |
Output is correct |
16 |
Correct |
1 ms |
2396 KB |
Output is correct |
17 |
Correct |
1 ms |
2396 KB |
Output is correct |
18 |
Correct |
1 ms |
2648 KB |
Output is correct |
19 |
Correct |
1 ms |
2392 KB |
Output is correct |
20 |
Correct |
1 ms |
2396 KB |
Output is correct |
21 |
Correct |
1 ms |
2396 KB |
Output is correct |
22 |
Correct |
0 ms |
2396 KB |
Output is correct |
23 |
Correct |
1 ms |
2512 KB |
Output is correct |
24 |
Correct |
1 ms |
2392 KB |
Output is correct |
25 |
Correct |
1 ms |
2396 KB |
Output is correct |
26 |
Correct |
1 ms |
2396 KB |
Output is correct |
27 |
Correct |
1 ms |
2396 KB |
Output is correct |
28 |
Correct |
1 ms |
2392 KB |
Output is correct |
29 |
Correct |
1 ms |
2392 KB |
Output is correct |
30 |
Correct |
1 ms |
2392 KB |
Output is correct |
31 |
Correct |
1 ms |
2396 KB |
Output is correct |
32 |
Correct |
1 ms |
2396 KB |
Output is correct |
33 |
Correct |
79 ms |
57820 KB |
Output is correct |
34 |
Correct |
140 ms |
67116 KB |
Output is correct |
35 |
Correct |
104 ms |
57936 KB |
Output is correct |
36 |
Correct |
120 ms |
61820 KB |
Output is correct |
37 |
Correct |
43 ms |
57168 KB |
Output is correct |
38 |
Correct |
45 ms |
57168 KB |
Output is correct |
39 |
Correct |
65 ms |
64080 KB |
Output is correct |
40 |
Correct |
63 ms |
64084 KB |
Output is correct |
41 |
Correct |
37 ms |
55376 KB |
Output is correct |
42 |
Correct |
39 ms |
56196 KB |
Output is correct |
43 |
Correct |
31 ms |
55252 KB |
Output is correct |
44 |
Correct |
49 ms |
59220 KB |
Output is correct |
45 |
Correct |
30 ms |
55120 KB |
Output is correct |
46 |
Correct |
33 ms |
55532 KB |
Output is correct |
47 |
Correct |
45 ms |
59476 KB |
Output is correct |
48 |
Correct |
43 ms |
59472 KB |
Output is correct |
49 |
Correct |
107 ms |
59216 KB |
Output is correct |
50 |
Correct |
108 ms |
59228 KB |
Output is correct |
51 |
Correct |
108 ms |
66004 KB |
Output is correct |
52 |
Correct |
104 ms |
65360 KB |
Output is correct |
53 |
Correct |
100 ms |
57424 KB |
Output is correct |
54 |
Correct |
82 ms |
57936 KB |
Output is correct |
55 |
Correct |
61 ms |
56148 KB |
Output is correct |
56 |
Correct |
94 ms |
61008 KB |
Output is correct |
57 |
Correct |
62 ms |
56964 KB |
Output is correct |
58 |
Correct |
68 ms |
57256 KB |
Output is correct |
59 |
Correct |
45 ms |
59472 KB |
Output is correct |