#include <bits/stdc++.h>
using namespace std;
const int N=3e5+1;
int mast[N];
int mash[N];
int n,m;
int pref_maxv[N];
int pref_min[N];
int am[N];
void initialize(vector<int> t, vector<int> h) {
int n=t.size();
int m=h.size();
pref_min[0]=1e9;
for(int i=1;i<=n;++i){
mast[i]=t[i-1];
if(mast[pref_maxv[i]]<mast[i]){
pref_maxv[i]=i;
}
pref_min[i]=min(pref_min[i-1],t[i]);
}
for(int i=1;i<=m;++i){
mash[i]=h[i-1];
int l=1;
int r=n;
while(l<=r){
int mid=(l+r)/2;
if(pref_min[mid]>mash[i]){
l=mid+1;
am[i]=pref_maxv[mid];
}
else{
r=mid-1;
}
}
}
}
int ind(int v){
int g=am[v];
for(int i=v+1;i<=m;++i){
if(mast[g]<=mash[i]){
break;
}
g=max(g,am[i]);
}
int e=am[v];
for(int i=v-1;i>0;--i){
if(mast[g]<=mash[i]){
break;
}
g=max(g,am[i]);
}
return max(g,e);
}
bool can_reach(int l, int r, int s, int d) {
s++;
d++;
int u=ind(s);
int g=ind(d);
int x=min(u,g);
for(int i=min(s,d);i<=max(s,d);++i){
if(mast[x]<=mash[i]){
return 0;
}
}
return 1;
}
| # | 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... |