#include "railroad.h"
#include<bits/stdc++.h>
#define ll long long
#define F first
#define S second
using namespace std;
const ll maxn=1e18;
pair<ll,ll> tri[800010];
pair<ll,ll> chose(pair<ll,ll> a,pair<ll,ll> b){
return min(a,b);
}
void modify(int l,int r,int id,ll tar,ll x){
if(l==r){
tri[id]={x,tar};
return;
}
int m=(l+r)>>1;
if(tar<=m)modify(l,m,id*2+1,tar,x);
else modify(m+1,r,id*2+2,tar,x);
tri[id]=chose(tri[id*2+1],tri[id*2+2]);
return;
}
pair<ll,ll> query(int l,int r,int id,int L,int R){
if(l==L&&r==R)return tri[id];
int m=(l+r)>>1;
if(L>m)return query(m+1,r,id*2+2,L,R);
else if(R<=m)return query(l,m,id*2+1,L,R);
else return chose(query(l,m,id*2+1,L,m),query(m+1,r,id*2+2,m+1,R));
}
long long plan_roller_coaster(vector<int> s, vector<int> t) {
int n = (int) s.size();
ll ans=0;
vector<pair<ll,ll>> vc;
set<pair<ll,ll>> st;
for(int i=0;i<n;i++){
vc.push_back({s[i],t[i]});
}
sort(vc.begin(),vc.end());
vc.push_back({0,0});
for(int i=0;i<n;i++){
modify(0,n-1,0,i,vc[i].S);
if(i==0||vc[i].F!=vc[i-1].F)st.insert(make_pair(vc[i].F,i));
}
ll cnt=0,now=maxn;
while(1){
auto x=st.lower_bound({now,0});
if(x==st.end())break;
auto u=query(0,n-1,0,(*x).S,n-1);
now=u.F;
if(u.F==maxn)break;
modify(0,n-1,0,u.S,maxn);
cnt++;
}
return cnt==n?0:1;
}
Compilation message (stderr)
railroad.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
railroad_c.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
# | 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... |