QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#233849 | #2788. Horses | Camillus# | 37 | 495ms | 24408kb | C++20 | 4.1kb | 2023-11-01 00:59:11 | 2024-07-04 02:22:30 |
Judging History
answer
#pragma GCC optimize("Ofast")
#include "horses.h"
#include "bits/stdc++.h"
using ll = long long;
using i128 = __int128;
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] = i;
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) {
// int res = n;
// for (int i = l; i < r; i++) {
// if (Y[res] < Y[i]) {
// res = i;
// }
// }
// return res;
if (l <= lx && rx <= r) {
return tree[x];
}
if (l >= rx || lx >= r) {
return n;
}
int mx = (lx + rx) / 2;
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 1;
}
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;
{
i128 cur = 1;
for (int r = n - 1; r >= 0;) {
int R = r + 1;
if (X[r] == 1) {
int LL = 0;
int RR = r;
while (RR - LL > 1) {
int M = (LL + RR) / 2;
if (st1::get(M, R) == 1) {
RR = M;
} else {
LL = M;
}
}
r = LL;
}
cur *= X[r];
if (cur > mint::mod * 10) {
break;
} else {
q.emplace_back(r, st0::get(r, R));
}
r--;
}
}
reverse(q.begin(), q.end());
vector<pair<i128, int>> v;
for (i128 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);
Y.push_back(0);
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: 14248kb
input:
1 2 3 0
output:
6
result:
ok single line: '6'
Test #2:
score: 0
Accepted
time: 0ms
memory: 14008kb
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: 2ms
memory: 13984kb
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: 14344kb
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: 1ms
memory: 13996kb
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: 14076kb
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: 14272kb
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: 3ms
memory: 14272kb
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: 0ms
memory: 14080kb
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: 0ms
memory: 13952kb
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: 0ms
memory: 14076kb
input:
2 2 5 9 7 0
output:
70
result:
ok single line: '70'
Test #12:
score: 0
Accepted
time: 0ms
memory: 14276kb
input:
1 1 1 0
output:
1
result:
ok single line: '1'
Test #13:
score: 0
Accepted
time: 0ms
memory: 14076kb
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: 0ms
memory: 13980kb
input:
1 10 10 0
output:
100
result:
ok single line: '100'
Test #15:
score: 0
Accepted
time: 0ms
memory: 13948kb
input:
2 1 4 7 2 0
output:
8
result:
ok single line: '8'
Test #16:
score: 0
Accepted
time: 0ms
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: 2ms
memory: 14084kb
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: 14352kb
input:
4 1 2 4 8 8 4 2 1 0
output:
64
result:
ok single line: '64'
Test #19:
score: 0
Accepted
time: 0ms
memory: 14264kb
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: 4ms
memory: 14020kb
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: 14016kb
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: 14076kb
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 999999622 999999622 999999622 999999622 999990382 539408243 49037113 617280725 123456145 86419704 851238418 489396978 354709175 354709175
result:
wrong answer 13th lines differ - expected: '999999832', found: '86419704'
Subtask #3:
score: 20
Accepted
Test #33:
score: 20
Accepted
time: 495ms
memory: 24344kb
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 795463654 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:
ok 100001 lines
Test #34:
score: 0
Accepted
time: 246ms
memory: 24272kb
input:
500000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000...
output:
764523385 560650427 560650427 711685442 711685442 711685442 630166054 630166054 630166054 604940491 56866480 384893091 501798659 560422885 560422885 18199764 63591615 212319888 212319888 39499230 828983454 828983454 634555752 4896305 181214713 231675794 231675794 966365836 181367397 181367397 987190...
result:
ok 100001 lines
Test #35:
score: 0
Accepted
time: 265ms
memory: 23804kb
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 192947708 884245369 884245369 884245369 884245369 884245369 649885822 981487169 321173457 159089267 159089267 159089267 747556995 964496384 964496384 964496384 928334020 928334020 928334020 928334020 459124375 459124375 404955269 251629123 80789828 80789828 463250667 463250667 120836466 57...
result:
ok 100001 lines
Test #36:
score: 0
Accepted
time: 304ms
memory: 24408kb
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:
628833504 223286077 463897870 972304401 127408916 377483838 722400213 221924185 818717195 473021697 502484429 318341012 230123148 522240493 607202268 818940989 569566927 384659940 448632730 578079312 667605482 963648869 939506632 965323855 498894254 695643284 699407581 168605135 70361400 795950777 1...
result:
ok 100001 lines
Subtask #4:
score: 0
Skipped
Dependency #2:
0%
Subtask #5:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
0%