#include<bits/stdc++.h>
using namespace std;
const int maxn=200000+10;
int fl[maxn],fr[maxn],dpl[maxn],kaf=(1<<19),dpr[maxn],dp[maxn],inf=1e8,n;
pair<int,int>all[maxn];
vector<int>adj[maxn];
struct segment{
pair<int,int>seg[(1<<20)];
segment(){
for(int i=0;i<(1<<20);i++){
seg[i]=make_pair(-inf,-inf);
}
}
void clear(){
for(int i=0;i<(1<<20);i++){
seg[i]=make_pair(-inf,-inf);
}
}
void ins(int i,pair<int,int>w){
i+=kaf;
seg[i]=w;
i>>=1;
while(i>0){
seg[i]=max(seg[(i<<1)],seg[(i<<1)^1]);
i>>=1;
}
}
pair<int,int> pors(int i,int l,int r,int tl,int tr){
if(l>r||l>tr||r<tl||tl>tr){
return make_pair(-inf,-inf);
}
if(l>=tl&&r<=tr){
return seg[i];
}
int m=(l+r)>>1;
return max(pors((i<<1),l,m,tl,tr),pors((i<<1)^1,m+1,r,tl,tr));
}
}seg;
void vorod(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>all[i].first>>all[i].second;
}
}
void calfr(int ind){
fr[ind]=seg.pors(1,0,kaf-1,all[ind].first,all[ind].second).second;
if(all[fr[ind]].second==all[ind].second){
fr[ind]=-1;
}else{
adj[fr[ind]].push_back(ind);
}
}
void calr(){
seg.clear();
for(int i=1;i<=n;i++){
seg.ins(i,make_pair(all[i].second,i));
}
for(int i=1;i<=n;i++){
dpr[i]=inf;
calfr(i);
}
vector<pair<int,int>>v;
for(int i=1;i<=n;i++){
v.push_back(make_pair(all[i].second,i));
}
sort(v.rbegin(),v.rend());
for(int i=0;i<n;i++){
int u=v[i].second;
if(v[i].first==n){
dpr[u]=0;
continue;
}
if(fr[u]==-1){
continue;
}
dpr[u]=dpr[fr[u]]+1;
}
}
void calfl(int ind){
fl[ind]=-seg.pors(1,0,kaf-1,all[ind].first,all[ind].second).second;
if(all[fl[ind]].first==all[ind].first){
fl[ind]=-1;
}else{
adj[fl[ind]].push_back(ind);
}
}
void call(){
seg.clear();
for(int i=1;i<=n;i++){
seg.ins(i,make_pair(-all[i].first,-i));
}
for(int i=1;i<=n;i++){
calfl(i);
dpl[i]=inf;
}
vector<pair<int,int>>v;
for(int i=1;i<=n;i++){
v.push_back(make_pair(all[i].first,i));
}
sort(v.begin(),v.end());
for(int i=0;i<n;i++){
int u=v[i].second;
if(v[i].first==1){
dpl[u]=0;
continue;
}
if(fl[u]==-1){
continue;
}
dpl[u]=dpl[fl[u]]+1;
}
}
void calres(){
for(int i=1;i<=n;i++){
dp[i]=dpr[i]+dpl[i]+1;
}
for(int asd=0;asd<10;asd++){
set<pair<int,int>>st;
for(int i=1;i<=n;i++){
st.insert(make_pair(dp[i],i));
}
vector<int>vis(n+2);
while((int)st.size()>0){
auto x=*st.begin();
st.erase(x);
if(vis[x.second]==1){
continue;
}
vis[x.second]=1;
if(x.first<dp[x.second]&&asd>2){
assert(0);
}
dp[x.second]=x.first;
for(auto y:adj[x.second]){
st.insert(make_pair(x.first+1,y));
}
}
vector<pair<int,int>>v;
for(int i=1;i<=n;i++){
v.push_back(make_pair(all[i].second-all[i].first+1,i));
}
sort(v.rbegin(),v.rend());
seg.clear();
for(int i=0;i<n;i++){
int u=v[i].second;
seg.ins(u,make_pair(-(dp[u]-1),u));
int z=-seg.pors(1,0,kaf-1,all[u].first,all[u].second).first+1;
if(asd>2&&z!=dp[u]){
assert(0);
}
dp[u]=min(dp[u],z);
seg.ins(u,make_pair(-dp[u],u));
// for(int j=all[u].first;j<=all[u].second;j++){
// dp[u]=min(dp[u],dp[j]+(j!=u));
// }
}
}
}
void pre(){
call();
calr();
calres();
}
void khor(){
int q;
cin>>q;
for(int i=1;i<=q;i++){
int x;
cin>>x;
if(dp[x]>=inf/2){
cout<<-1<<"\n";
}else{
cout<<dp[x]<<"\n";
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// freopen("inp.txt","r",stdin);
vorod();
pre();
khor();
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
16984 KB |
Output is correct |
2 |
Correct |
11 ms |
16988 KB |
Output is correct |
3 |
Correct |
12 ms |
16988 KB |
Output is correct |
4 |
Execution timed out |
2092 ms |
32448 KB |
Time limit exceeded |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
16988 KB |
Output is correct |
2 |
Correct |
11 ms |
17036 KB |
Output is correct |
3 |
Correct |
12 ms |
16988 KB |
Output is correct |
4 |
Correct |
14 ms |
16988 KB |
Output is correct |
5 |
Correct |
12 ms |
16984 KB |
Output is correct |
6 |
Correct |
12 ms |
16988 KB |
Output is correct |
7 |
Correct |
13 ms |
16988 KB |
Output is correct |
8 |
Correct |
12 ms |
16988 KB |
Output is correct |
9 |
Correct |
11 ms |
16984 KB |
Output is correct |
10 |
Correct |
12 ms |
16988 KB |
Output is correct |
11 |
Correct |
14 ms |
17076 KB |
Output is correct |
12 |
Correct |
14 ms |
17072 KB |
Output is correct |
13 |
Correct |
14 ms |
16988 KB |
Output is correct |
14 |
Correct |
14 ms |
17056 KB |
Output is correct |
15 |
Correct |
13 ms |
17000 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
16988 KB |
Output is correct |
2 |
Correct |
11 ms |
17036 KB |
Output is correct |
3 |
Correct |
12 ms |
16988 KB |
Output is correct |
4 |
Correct |
14 ms |
16988 KB |
Output is correct |
5 |
Correct |
12 ms |
16984 KB |
Output is correct |
6 |
Correct |
12 ms |
16988 KB |
Output is correct |
7 |
Correct |
13 ms |
16988 KB |
Output is correct |
8 |
Correct |
12 ms |
16988 KB |
Output is correct |
9 |
Correct |
11 ms |
16984 KB |
Output is correct |
10 |
Correct |
12 ms |
16988 KB |
Output is correct |
11 |
Correct |
14 ms |
17076 KB |
Output is correct |
12 |
Correct |
14 ms |
17072 KB |
Output is correct |
13 |
Correct |
14 ms |
16988 KB |
Output is correct |
14 |
Correct |
14 ms |
17056 KB |
Output is correct |
15 |
Correct |
13 ms |
17000 KB |
Output is correct |
16 |
Correct |
32 ms |
17244 KB |
Output is correct |
17 |
Correct |
36 ms |
16988 KB |
Output is correct |
18 |
Correct |
36 ms |
16984 KB |
Output is correct |
19 |
Correct |
33 ms |
16988 KB |
Output is correct |
20 |
Correct |
29 ms |
17496 KB |
Output is correct |
21 |
Correct |
28 ms |
17244 KB |
Output is correct |
22 |
Correct |
30 ms |
17112 KB |
Output is correct |
23 |
Correct |
28 ms |
17240 KB |
Output is correct |
24 |
Correct |
29 ms |
16988 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
16988 KB |
Output is correct |
2 |
Correct |
11 ms |
17036 KB |
Output is correct |
3 |
Correct |
12 ms |
16988 KB |
Output is correct |
4 |
Correct |
14 ms |
16988 KB |
Output is correct |
5 |
Correct |
12 ms |
16984 KB |
Output is correct |
6 |
Correct |
12 ms |
16988 KB |
Output is correct |
7 |
Correct |
13 ms |
16988 KB |
Output is correct |
8 |
Correct |
12 ms |
16988 KB |
Output is correct |
9 |
Correct |
11 ms |
16984 KB |
Output is correct |
10 |
Correct |
12 ms |
16988 KB |
Output is correct |
11 |
Correct |
14 ms |
17076 KB |
Output is correct |
12 |
Correct |
14 ms |
17072 KB |
Output is correct |
13 |
Correct |
14 ms |
16988 KB |
Output is correct |
14 |
Correct |
14 ms |
17056 KB |
Output is correct |
15 |
Correct |
13 ms |
17000 KB |
Output is correct |
16 |
Correct |
32 ms |
17244 KB |
Output is correct |
17 |
Correct |
36 ms |
16988 KB |
Output is correct |
18 |
Correct |
36 ms |
16984 KB |
Output is correct |
19 |
Correct |
33 ms |
16988 KB |
Output is correct |
20 |
Correct |
29 ms |
17496 KB |
Output is correct |
21 |
Correct |
28 ms |
17244 KB |
Output is correct |
22 |
Correct |
30 ms |
17112 KB |
Output is correct |
23 |
Correct |
28 ms |
17240 KB |
Output is correct |
24 |
Correct |
29 ms |
16988 KB |
Output is correct |
25 |
Correct |
12 ms |
16984 KB |
Output is correct |
26 |
Correct |
12 ms |
17040 KB |
Output is correct |
27 |
Correct |
33 ms |
17240 KB |
Output is correct |
28 |
Correct |
34 ms |
17232 KB |
Output is correct |
29 |
Correct |
29 ms |
17240 KB |
Output is correct |
30 |
Correct |
29 ms |
17240 KB |
Output is correct |
31 |
Correct |
30 ms |
17240 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
12 ms |
16984 KB |
Output is correct |
2 |
Correct |
11 ms |
16988 KB |
Output is correct |
3 |
Correct |
12 ms |
16988 KB |
Output is correct |
4 |
Execution timed out |
2092 ms |
32448 KB |
Time limit exceeded |
5 |
Halted |
0 ms |
0 KB |
- |