QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#233820 | #2788. Horses | Camillus# | 17 | 301ms | 23236kb | C++20 | 3.9kb | 2023-11-01 00:15:18 | 2024-07-04 02:22:11 |
Judging History
answer
#include "horses.h"
#include "bits/stdc++.h"
using ll = long long;
using namespace std;
struct mint {
static constexpr int mod = 1e9 + 7;
int data = 0;
mint() = default;
mint(int data) : data(data) {}
mint operator+(const mint &other) const {
int res = data + other.data;
if (res >= mod) {
res -= mod;
}
return res;
}
mint operator-(const mint &other) const {
int res = data + mod - other.data;
if (res >= mod) {
res -= mod;
}
return res;
}
mint operator*(const mint &other) const {
return mint(1ll * data * other.data % mod);
}
};
int n;
vector<int> x, y;
constexpr int maxn = 1 << 19;
namespace st0 {
int tree[maxn * 2 - 1];
void set(int i, int x = 0, int lx = 0, int rx = maxn) {
if (rx - lx == 1) {
tree[x] = lx;
return;
}
int mx = (lx + rx) / 2;
if (i < mx) {
set(i, x * 2 + 1, lx, mx);
} else {
set(i, x * 2 + 2, mx, rx);
}
if (y[tree[x * 2 + 1]] > y[tree[x * 2 + 2]]) {
tree[x] = tree[x * 2 + 1];
} else {
tree[x] = tree[x * 2 + 2];
}
}
int get(int l, int r, int x = 0, int lx = 0, int rx = maxn) {
if (l <= lx && rx <= r) {
return tree[x];
}
int mx = (lx + rx) / 2;
if (r <= mx) {
return get(l, r, x * 2 + 1, lx, mx);
} else if (l >= mx) {
return get(l, r, x * 2 + 2, mx, rx);
} else {
int i = get(l, r, x * 2 + 1, lx, mx);
int j = get(l, r, x * 2 + 2, mx, rx);
if (y[i] > y[j]) {
return i;
} else {
return j;
}
}
}
} // namespace st0
namespace st1 {
int tree[maxn * 2 - 1];
void set(int i, int v, int x = 0, int lx = 0, int rx = maxn) {
if (rx - lx == 1) {
tree[x] = v;
return;
}
int mx = (lx + rx) / 2;
if (i < mx) {
set(i, v, x * 2 + 1, lx, mx);
} else {
set(i, v, x * 2 + 2, mx, rx);
}
tree[x] = max(tree[x * 2 + 1], tree[x * 2 + 2]);
}
int get(int l, int r, int x = 0, int lx = 0, int rx = maxn) {
if (l <= lx && rx <= r) {
return tree[x];
}
if (l >= rx || lx >= r) {
return INT32_MIN;
}
return max(
get(l, r, x * 2 + 1, lx, (lx + rx) / 2),
get(l, r, x * 2 + 2, (lx + rx) / 2, rx)
);
}
} // namespace st1
namespace st2 {
mint tree[maxn * 2 - 1];
void set(int i, int v, int x = 0, int lx = 0, int rx = maxn) {
if (rx - lx == 1) {
tree[x] = v;
return;
}
int mx = (lx + rx) / 2;
if (i < mx) {
set(i, v, x * 2 + 1, lx, mx);
} else {
set(i, v, x * 2 + 2, mx, rx);
}
tree[x] = tree[x * 2 + 1] * tree[x * 2 + 2];
}
mint get(int l, int r, int x = 0, int lx = 0, int rx = maxn) {
if (l <= lx && rx <= r) {
return tree[x];
}
if (l >= rx || lx >= r) {
return 1;
}
return get(l, r, x * 2 + 1, lx, (lx + rx) / 2) * get(l, r, x * 2 + 2, (lx + rx) / 2, rx);
}
} // namespace st2
int calc() {
vector<pair<int, int>> q;
{
ll cur = 1;
for (int r = n - 1; r >= 0;) {
int R = r + 1;
for (int j = 17; j >= 0 && x[r] == 1; j--) {
if (r - (1 << j) + 1 >= 0 && st1::get(R - (1 << j), R) == 1) {
r -= (1 << j);
}
}
cur *= x[r];
if (cur > 1e9) {
break;
} else {
q.emplace_back(r, st0::get(r, R));
}
r--;
}
}
reverse(q.begin(), q.end());
vector<pair<ll, int>> v;
for (ll cur = 1; auto [a, b] : q) {
cur *= x[a];
v.emplace_back(cur * y[b], b);
}
int pos = max_element(v.begin(), v.end())->second;
return (st2::get(0, pos + 1) * y[pos]).data;
}
int init(int N, int X[], int Y[]) {
n = N;
x = vector<int>(X, X + n);
y = vector<int>(Y, Y + n);
for (int i = 0; i < n; i++) {
st0::set(i);
st1::set(i, x[i]);
st2::set(i, x[i]);
}
return calc();
}
int updateX(int pos, int val) {
x[pos] = val;
st1::set(pos, val);
st2::set(pos, val);
return calc();
}
int updateY(int pos, int val) {
y[pos] = val;
st0::set(pos);
return calc();
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 17
Accepted
Test #1:
score: 17
Accepted
time: 0ms
memory: 14072kb
input:
1 2 3 0
output:
6
result:
ok single line: '6'
Test #2:
score: 0
Accepted
time: 2ms
memory: 14300kb
input:
10 2 1 1 5 2 1 1 10 5 1 3 5 7 9 4 1 4 10 10 9 0
output:
10000
result:
ok single line: '10000'
Test #3:
score: 0
Accepted
time: 3ms
memory: 14380kb
input:
10 10 10 10 1 1 1 1 1 1 1 2 3 4 2 7 6 5 4 3 2 0
output:
7000
result:
ok single line: '7000'
Test #4:
score: 0
Accepted
time: 0ms
memory: 13952kb
input:
10 9 1 1 1 1 1 1 1 1 2 4 1 1 1 1 1 1 1 1 2 0
output:
36
result:
ok single line: '36'
Test #5:
score: 0
Accepted
time: 0ms
memory: 14016kb
input:
10 1 1 1 1 1 1 1 1 1 1 1 2 3 4 5 6 7 8 9 10 0
output:
10
result:
ok single line: '10'
Test #6:
score: 0
Accepted
time: 0ms
memory: 14368kb
input:
10 1 1 1 1 1 1 1 1 1 1 10 9 8 7 6 5 4 3 2 1 0
output:
10
result:
ok single line: '10'
Test #7:
score: 0
Accepted
time: 0ms
memory: 14004kb
input:
10 10 10 10 1 1 1 1 1 1 1 10 10 2 3 4 5 6 7 8 9 0
output:
9000
result:
ok single line: '9000'
Test #8:
score: 0
Accepted
time: 2ms
memory: 14376kb
input:
10 10 10 10 1 1 1 1 1 1 1 10 10 9 8 7 6 5 4 3 2 0
output:
9000
result:
ok single line: '9000'
Test #9:
score: 0
Accepted
time: 2ms
memory: 14112kb
input:
10 1 1 1 1 2 2 1 1 1 1 8 8 8 8 1 1 2 2 2 2 0
output:
8
result:
ok single line: '8'
Test #10:
score: 0
Accepted
time: 2ms
memory: 14004kb
input:
10 1 1 1 1 1 1 1 1 1 1 1 2 3 4 5 9 8 7 6 1 0
output:
9
result:
ok single line: '9'
Test #11:
score: 0
Accepted
time: 2ms
memory: 14012kb
input:
2 2 5 9 7 0
output:
70
result:
ok single line: '70'
Test #12:
score: 0
Accepted
time: 2ms
memory: 14272kb
input:
1 1 1 0
output:
1
result:
ok single line: '1'
Test #13:
score: 0
Accepted
time: 2ms
memory: 13944kb
input:
7 7 1 1 6 2 3 2 7 6 5 4 3 7 1 0
output:
1764
result:
ok single line: '1764'
Test #14:
score: 0
Accepted
time: 2ms
memory: 14304kb
input:
1 10 10 0
output:
100
result:
ok single line: '100'
Test #15:
score: 0
Accepted
time: 2ms
memory: 14056kb
input:
2 1 4 7 2 0
output:
8
result:
ok single line: '8'
Test #16:
score: 0
Accepted
time: 3ms
memory: 14072kb
input:
10 1 10 1 10 1 1 10 1 1 1 7 3 10 10 4 10 1 4 5 10 0
output:
10000
result:
ok single line: '10000'
Test #17:
score: 0
Accepted
time: 3ms
memory: 14300kb
input:
6 1 1 1 1 1 1 1 1 1 1 1 1 0
output:
1
result:
ok single line: '1'
Test #18:
score: 0
Accepted
time: 0ms
memory: 14020kb
input:
4 1 2 4 8 8 4 2 1 0
output:
64
result:
ok single line: '64'
Test #19:
score: 0
Accepted
time: 2ms
memory: 14060kb
input:
6 1 2 2 3 1 1 7 1 1 2 1 1 0
output:
24
result:
ok single line: '24'
Test #20:
score: 0
Accepted
time: 2ms
memory: 14048kb
input:
10 2 1 1 5 2 1 1 10 5 1 3 5 7 9 4 1 4 10 7 9 0
output:
9000
result:
ok single line: '9000'
Subtask #2:
score: 0
Wrong Answer
Dependency #1:
100%
Accepted
Test #21:
score: 17
Accepted
time: 0ms
memory: 14012kb
input:
10 10 10 10 10 10 10 1 1 1 1 1 1 1 1 9 5 4 7 3 2 5 1 5 1 2 5 123456789 1 5 1 1 8 987654321 1 9 777777777
output:
7000000 900000 678813585 678813585 294225928 75803567
result:
ok 6 lines
Test #22:
score: -17
Wrong Answer
time: 0ms
memory: 14272kb
input:
10 3 2 7 5 11 13 107 23 51 3 1 1 1 1 1000000000 1 1 1 1 1 16 1 1 1 1 2 1 1 0 1 1 8 1 1 7 1 1 9 1 1 1 25 1 8 123456789 1 4 1 1 6 1 1 3 1 1 5 1 1 5 12345 1 6 123456 1 7 1234567 2 4 3
output:
999983837 999991922 999998852 269221095 5278845 229515 76505 1912625 539408243 49037113 617280725 123456145 86419704 851238418 489396978 354709175 354709175
result:
wrong answer 4th lines differ - expected: '999999622', found: '269221095'
Subtask #3:
score: 0
Wrong Answer
Test #33:
score: 0
Wrong Answer
time: 301ms
memory: 23236kb
input:
500000 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2...
output:
967631222 967631222 967631222 885679347 618832158 618832158 618832158 618832158 618832158 582471866 864166718 864166718 864166718 864166718 864166718 813424701 813424701 813424701 813424701 813424701 815547130 815547130 815547130 815547130 815547130 715585103 715585103 715585103 715585103 715585103 ...
result:
wrong answer 3rd lines differ - expected: '795463654', found: '967631222'
Subtask #4:
score: 0
Skipped
Dependency #2:
0%
Subtask #5:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
0%