Submission #596218

#TimeUsernameProblemLanguageResultExecution timeMemory
596218DeepessonEvent Hopping (BOI22_events)C++17
0 / 100
1576 ms20536 KiB
#include <bits/stdc++.h> #define MAX 200010 #define LSB(A) (A&(-A)) #define LOG 20 int N,Q; typedef std::pair<int,int> pii; std::vector<pii> eventos; std::vector<int> add[MAX]; std::vector<int> rem[MAX]; int ft[MAX]; typedef std::pair<int,int*> pipo; int custos[101000]; int trava; int armazena[MAX]; int valor[MAX]; int jump[MAX][LOG]; void gera_conexoes(){ for(int i=0;i!=N;++i){ int max=1e9+1,pep=-1; int l = eventos[i].first,r=eventos[i].second; for(int i=0;i!=eventos.size();++i){ auto x = eventos[i]; if(x.second>=l&&x.second<=r){ if(x.first<max){ max=x.first; pep=i; } } } jump[i][0]=pep; } } int tabp5[5005][5005]; 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; } trava=cord; } for(int i=0;i!=N;++i){ add[eventos[i].first].push_back(i); rem[eventos[i].second].push_back(i); } gera_conexoes(); for(int i=0;i!=N;++i)if(jump[i][0]==i)jump[i][0]=-1; // for(int i=0;i!=N;++i)std::cout<<jump[i][0]<<" \n"[i==N-1]; for(int j=1;j!=LOG;++j){ for(int i=0;i!=N;++i){ if(jump[i][j-1]==-1)jump[i][j]=-1; else jump[i][j]=jump[jump[i][j-1]][j-1]; // std::cout<<jump[i][j]<<" \n"[i==N-1]; } } for(int i=0;i!=Q;++i){ int s,t; std::cin>>s>>t; --s;--t; if(s==t){ std::cout<<"0\n"; continue; } int cord = eventos[s].second; int pos = t; int dist=0; for(int i=LOG-1;i!=-1;--i){ // std::cout<<"Analisa "<<jump[pos][i]<<" "<<pos<<"!\n"; if(jump[pos][i]!=-1&&eventos[jump[pos][i]].second>=cord){ dist+=1<<i; pos=jump[pos][i]; } } // std::cout<<"padrao: "<<dist<<"\n"; if(pos!=s){ ++dist; } if(eventos[pos].first<=cord&&eventos[pos].second>=cord){ std::cout<<dist<<"\n"; }else std::cout<<"impossible\n"; } }

Compilation message (stderr)

events.cpp: In function 'void gera_conexoes()':
events.cpp:27:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |         for(int i=0;i!=eventos.size();++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...