제출 #595567

#제출 시각아이디문제언어결과실행 시간메모리
595567DeepessonEvent Hopping (BOI22_events)C++17
10 / 100
1585 ms33804 KiB
#include <bits/stdc++.h> #define MAX 200005 int N,Q; typedef std::pair<int,int> pii; std::vector<pii> eventos; std::vector<int> add[MAX]; std::vector<int> rem[MAX]; int catalogo_avanco[MAX]; bool moscando[MAX]; int visitado[MAX]; void explora(int x){ memset(&catalogo_avanco,0,sizeof(catalogo_avanco)); memset(&visitado,0,sizeof(visitado)); memset(&moscando,0,sizeof(moscando)); catalogo_avanco[eventos[x].second]=1; for(int i=0;i!=MAX;++i){ for(auto&x:add[i]){ moscando[x]=true; } int d = catalogo_avanco[i]; if(d){ for(int i=0;i!=N;++i){ auto& x = moscando[i]; if(!x)continue; if(d){ if(!visitado[i]) visitado[i]=d+1; else visitado[i]=std::min(visitado[i],d+1); } // std::cout<<"Visita "<<x.first<<" "<<d<<" "<<i<<"\n"; if(!catalogo_avanco[eventos[i].second])catalogo_avanco[eventos[i].second]=d+1; else catalogo_avanco[eventos[i].second]=std::min((int)catalogo_avanco[eventos[i].second],d+1); } } for(auto&x:rem[i]){ moscando[x]=false; } } } typedef std::pair<int,int*> pipo; int secao[MAX],periodo[MAX]; int main() { std::ios::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); std::cin>>N>>Q; for(int i=0;i!=N;++i){ int a,b; std::cin>>a>>b; eventos.push_back({a,b}); } { std::vector<pipo> comprime; for(auto&x:eventos){ comprime.push_back({x.first,&x.first}); comprime.push_back({x.second,&x.second}); } std::sort(comprime.begin(),comprime.end()); int last=-1,cord=1; for(auto&x:comprime){ if(x.first!=last){ last=x.first; ++cord; } *x.second=cord; } } for(int i=0;i!=N;++i){ add[eventos[i].first].push_back(i); rem[eventos[i].second].push_back(i); } if(Q<=100){ for(int i=0;i!=Q;++i){ int s,e; std::cin>>s>>e;--s;--e; if(s==e){ std::cout<<"0\n"; continue; } explora(s); if(visitado[e]){ std::cout<<visitado[e]-1<<"\n"; }else std::cout<<"impossible\n"; } }else {///Linha assert(0); int count=0; int grupos=0; int prox=-1; for(int i=0;i!=MAX;++i){ for(auto&x:add[i]){ if(i!=prox){ ++grupos; } secao[i]=grupos; periodo[i]=count; ++count; prox=eventos[i].second; } } for(int i=0;i!=Q;++i){ int a,b; std::cin>>a>>b; --a;--b; if(secao[a]!=secao[b]){ std::cout<<"impossible\n"; continue; } int dist = periodo[a]-periodo[b]; if(dist<0){ std::cout<<"impossible\n"; continue; } std::cout<<dist<<"\n"; } } }

컴파일 시 표준 에러 (stderr) 메시지

events.cpp: In function 'int main()':
events.cpp:103:22: warning: unused variable 'x' [-Wunused-variable]
  103 |             for(auto&x:add[i]){
      |                      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...