#include<bits/stdc++.h>
#include "railroad.h"
using namespace std;
struct Road
{
int s,t;
inline bool operator<(const Road &oth)
{
if(t==oth.t)
return s<oth.s;
return t<oth.t;
}
};
struct Small
{
int t,id;
inline bool operator<(const Small &oth) const
{
if(t==oth.t)
return id<oth.id;
return t<oth.t;
}
};
struct Big
{
int s,id;
inline bool operator<(const Big &oth) const
{
if(s==oth.s)
return id<oth.id;
return s<oth.s;
}
};
const int N=2e5;
const int INF=1e9+7;
Road tab[N+10];
set<Small> sm;
set<Big> bg;
set<int> occ[N+10];
int id[N+10];
int wh[N+10];
long long plan_roller_coaster(vector<int> s,vector<int> t)
{
int n=s.size();
for(int i=0;i<n;i++)
tab[i]={s[i],t[i]};
sort(tab,tab+n);
sm.insert({0,n});
bg.insert({INF,n});
for(int i=0;i<n;i++)
{
while(!bg.empty() && (bg.begin()->s)<tab[i].t)
{
auto x=*bg.begin();
bg.erase(x);
auto it=prev(sm.end());
if(occ[it->id].find(x.id)!=occ[it->id].end())
it--;
auto tmp=*it;
sm.erase(it);
if(occ[tmp.id].size()>occ[id[x.id]].size())
{
int x_id=id[x.id];
for(auto v:occ[x_id])
{
occ[tmp.id].insert(v);
id[v]=tmp.id;
}
sm.erase({wh[x_id],x_id});
id[x.id]=tmp.id;
wh[tmp.id]=wh[x_id];
sm.insert({wh[id[x.id]],id[x.id]});
}
else
{
for(auto v:occ[tmp.id])
{
occ[id[x.id]].insert(v);
id[v]=id[x.id];
}
}
}
auto it=sm.upper_bound({tab[i].s,INF});
if(it==sm.begin() || sm.empty())
{
return 1;
}
if(tab[i].s>tab[i].t)
{
occ[i].insert(i);
id[i]=i;
wh[i]=tab[i].t;
sm.insert({tab[i].t,i});
bg.insert({tab[i].s,i});
}
else
{
auto tmp=*prev(it);
sm.erase(prev(it));
occ[tmp.id].insert(i);
id[i]=tmp.id;
wh[tmp.id]=tab[i].t;
sm.insert({tab[i].t,tmp.id});
}
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
9708 KB |
n = 2 |
2 |
Correct |
6 ms |
9708 KB |
n = 2 |
3 |
Correct |
6 ms |
9708 KB |
n = 2 |
4 |
Correct |
6 ms |
9708 KB |
n = 2 |
5 |
Correct |
6 ms |
9708 KB |
n = 2 |
6 |
Incorrect |
6 ms |
9708 KB |
answer is not correct: 1 instead of 523688153 |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
9708 KB |
n = 2 |
2 |
Correct |
6 ms |
9708 KB |
n = 2 |
3 |
Correct |
6 ms |
9708 KB |
n = 2 |
4 |
Correct |
6 ms |
9708 KB |
n = 2 |
5 |
Correct |
6 ms |
9708 KB |
n = 2 |
6 |
Incorrect |
6 ms |
9708 KB |
answer is not correct: 1 instead of 523688153 |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
664 ms |
59896 KB |
n = 199999 |
2 |
Correct |
355 ms |
35436 KB |
n = 199991 |
3 |
Correct |
86 ms |
18284 KB |
n = 199993 |
4 |
Correct |
512 ms |
61804 KB |
n = 152076 |
5 |
Correct |
275 ms |
37484 KB |
n = 93249 |
6 |
Correct |
288 ms |
60140 KB |
n = 199910 |
7 |
Correct |
229 ms |
49516 KB |
n = 199999 |
8 |
Correct |
234 ms |
48748 KB |
n = 199997 |
9 |
Correct |
490 ms |
67436 KB |
n = 171294 |
10 |
Correct |
498 ms |
62060 KB |
n = 140872 |
11 |
Correct |
79 ms |
17260 KB |
n = 199886 |
12 |
Correct |
97 ms |
17724 KB |
n = 199996 |
13 |
Correct |
96 ms |
17260 KB |
n = 200000 |
14 |
Correct |
81 ms |
17516 KB |
n = 199998 |
15 |
Correct |
81 ms |
17388 KB |
n = 200000 |
16 |
Correct |
86 ms |
17772 KB |
n = 199998 |
17 |
Correct |
105 ms |
18284 KB |
n = 200000 |
18 |
Correct |
144 ms |
32104 KB |
n = 190000 |
19 |
Correct |
207 ms |
43932 KB |
n = 177777 |
20 |
Correct |
218 ms |
41580 KB |
n = 100000 |
21 |
Correct |
495 ms |
77548 KB |
n = 200000 |
22 |
Correct |
466 ms |
54508 KB |
n = 200000 |
23 |
Correct |
681 ms |
81388 KB |
n = 200000 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
9708 KB |
n = 2 |
2 |
Correct |
6 ms |
9708 KB |
n = 2 |
3 |
Correct |
6 ms |
9708 KB |
n = 2 |
4 |
Correct |
6 ms |
9708 KB |
n = 2 |
5 |
Correct |
6 ms |
9708 KB |
n = 2 |
6 |
Incorrect |
6 ms |
9708 KB |
answer is not correct: 1 instead of 523688153 |
7 |
Halted |
0 ms |
0 KB |
- |