제출 #993012

#제출 시각아이디문제언어결과실행 시간메모리
993012amine_arouaEvent Hopping (BOI22_events)C++17
0 / 100
472 ms119132 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define nl '\n' #define pb push_back #define fore(i , n) for(int i = 0 ; i< n;i++) #define forr(i , x , y) for(int i = x; i <= y; i++) #define forn(i , x , y) for(int i = x; i >= y ; i--) const int N =2e5 + 10; struct seg { int BASE; vector<int> tree; void init(int n , vector<int> &a) { BASE = n; while(__builtin_popcount(BASE) != 1) { BASE++; } tree.assign(2*BASE , 0); fore(i , (int)a.size()) tree[i + BASE] = a[i]; forn(i , BASE - 1 , 1) tree[i] = max(tree[2*i] , tree[2*i +1]); } int query(int l , int r) { if(l > r) return 0; l+=BASE; r+=BASE; if(l == r) return tree[l]; int lt = tree[l] , rt = tree[r]; while(l + 1 < r) { if(l %2 == 0) { lt = max(lt , tree[l +1]); } if(r%2 == 1) rt = max(tree[r - 1] ,rt); l>>=1; r>>=1; } return max(lt ,rt); } }tree[19]; signed main() { int n , q; cin>>n>>q; map<int , int> compress; vector<pair<int ,int>> v(n); vector<vector<int>> adj(20 , vector<int>(N)); vector<tuple<int , int, int>> koll; fore(i , n) { cin>>v[i].first>>v[i].second; koll.pb({v[i].first , 0 , i}); koll.pb({v[i].second , 1 , i}); } vector<pair<int ,int>> iv = v; sort(koll.begin() , koll.end()); int cnt = 0; for(auto [x , t , i] : koll) { if(t == 0) v[i].first = cnt++; else v[i].second = cnt++; } fore(i , n) { adj[0][v[i].first] = v[i].second; } forr(i , 1 , 19) { tree[i - 1].init(N , adj[i - 1]); fore(j , N) { adj[i][j] = tree[i - 1].query(j , adj[i - 1][j]); } } while(q--) { int s , e; cin>>s>>e; s-- , e--; if(v[s].second > v[e].second) { cout<<"impossible"<<nl; continue; } if(v[e].first <= v[s].first && v[s].second <= v[e].second) { cout<<1<<nl; continue; } int cur = v[s].first; s = v[s].first; e = v[e].second; int ans = 0; forn(i , 18 , 0) { int ns = tree[i].query(s , cur); if(ns >= e) continue; cur = ns; ans+=(1<<i); } if(ans >= (1<<17)) cout<<"impossible"<<nl; else cout<<ans<<nl; } }
#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...