이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "jumps.h"
#include <vector>
#include <set>
#include <cmath>
#include <iostream>
using namespace std;
int const N=2e5+10,LG=20;
int mx[N][LG]={};
vector<int>a;
int get(int l,int r)
{
int lg=log2(r-l+1);
if (a[mx[l][lg]]>=a[mx[r-(1<<lg)+1][lg]])
return mx[l][lg];
return mx[r-(1<<lg)+1][lg];
}
void init(int N,vector<int> H)
{
a=H;
for (int i=0;i<N;i++)
mx[i][0]=i;
for (int i=1;(1<<i)<=N;i++)
for (int j=0;j+(1<<(i-1))<N;j++)
{
if (a[mx[j][i-1]]>=a[mx[j+(1<<(i-1))][i-1]])
mx[j][i]=mx[j][i-1];
else
mx[j][i]=mx[j+(1<<(i-1))][i-1];
}
}
int minimum_jumps(int A, int B, int C, int D)
{
int minsteps=1e9+10;
for (int i=A;i<=B;i++)
{
int z=get(i,D);
if (z>=C&&z<=D)
{
int st=i,en=z,cnt=0;;
while (1)
{
int f=st;
while (st+1<en)
{
int mid=(st+en)/2;
if (get(st,mid)>f)
en=mid;
else
st=mid;
}
cnt++;
if (en>=C&&en<=D)
break;
st=en;
en=z+1;
}
minsteps=min(cnt,minsteps);
}
}
if (minsteps==1e9+10)
return -1;
return minsteps;
}
# | 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... |