이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "jumps.h"
using namespace std;
using ll = long long;
vector<ll> seg, br,bl, d; ll n;
ll qw(ll a, ll b) {
b++;
ll ans = 0;
for (a += n, b += n; a < b; a /= 2, b /= 2) {
if (a % 2) {
ans = max(ans, seg[a]);
a++;
}
if (b % 2) {
b--;
ans = max(ans, seg[b]);
}
}
return ans;
}
ll ind(ll v, ll a, ll b) {
if (a == b) {
return a;
}
ll m = (a + b) / 2;
if (qw(a, m) >= v) {
return ind(v, a, m);
}
return ind(v, m + 1, b);
}
void init(int N, std::vector<int> H) {
n = N;
vector<pair<ll, ll>> sorted(n);
for (ll i = 0; i < n; i++) {
sorted[i] = { H[i],i };
}
sort(sorted.begin(), sorted.end());
seg = vector<ll>(2 * n + 1, 0);
//segment setup
for (ll i = 0; i < n; i++) {
seg[i + n] = H[i];
}
for (ll i = n - 1; i > 0; i--) {
seg[i] = max(seg[2 * i], seg[2 * i + 1]);
}
//br setup
br = vector<ll>(n, 0); bl = br; for (ll i = 0; i < n; i++) { br[i] = i + 1; bl[i] = i - 1; }
for (ll i = 0; i < n; i++) {
ll j = i;
while (bl[j] != -1) {
if (H[i] < H[bl[j]]) {
break;
}
j = bl[j];
}
bl[i] = bl[j];
}
for (ll i = n - 1; i >= 0; i--) {
ll j = i;
while (br[j] != n) {
if (H[i] < H[br[j]]) {
break;
}
j = br[j];
}
br[i] = br[j];
}
//distance
d = vector<ll>(n + 1,1e9); d[n] = 0;
for (ll i = n - 1; i >= 0; i--) {
ll inx = sorted[i].second;
if (bl[inx] != -1) {
d[inx] = d[bl[inx]] + 1;
}
d[inx] = min(d[inx],d[br[inx]] + 1);
}
}
//ind,qw,d
int minimum_jumps(int A, int B, int C, int D) {
if (B == C) {
return 0;
}
ll w = qw(B, C - 1);
ll x = ind(w, C, D);
if (w > seg[n + x]) {
return -1;
}
if (d[B] > d[x]) {
return d[B] - d[x];
}
return -1;
}
/*#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ll n; cin >> n;
vector<ll> a(n), r(n);
for (ll i = 0; i < n; i++) {
cin >> a[i];
r[i] = i - 1;
}
for (ll i = 0; i < n; i++) {
ll j = i;
while (r[j] != -1) {
if (a[i] > a[r[j]]) {
break;
}
j = r[j];
}
r[i] = r[j];
cout << r[i] + 1 << '\n';
}
}*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |