Submission #849505

#TimeUsernameProblemLanguageResultExecution timeMemory
849505vjudge1Event Hopping (BOI22_events)C++17
10 / 100
1547 ms15952 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> #define F first #define S second #define endl '\n' #define pb push_back #define sz(a) (int)a.size() #define all(a) a.begin(),a.end() const int mod = 1e9 + 7; const int N = 1e5 + 15; const ll inf = 1e18; int n,q; int dis[N]; struct segtree{ static const int off = (1<<18); int t[off*2]; int unit; void init(){ memset(t, 0x3f, sizeof(t)); unit = t[0]; } void update(int i,int u){ i+=off; if (u >= t[i]) return; t[i] = u; while (i/=2){ t[i] = min(t[i*2],t[i*2+1]); } } int get(int l, int r, int idx=1, int lo=0, int hi=off){ if (lo>=r||hi<=l) return unit; if (lo>=l&&hi<=r) return t[idx]; int mi = (lo+hi)/2; return min(get(l,r,idx*2,lo,mi),get(l,r,idx*2+1,mi,hi)); } } seg; vector<array<int, 3>> a; bool cmp(array<int, 3> A, array<int, 3> B){ if (A[1]!=B[1]) return A[1] < B[1]; return A[0] < B[0]; } pii b[N]; int solve(int root, int to){ dis[root] = 0; seg.update(b[root].S, 0); for (int i=0;i<n;i++){ if (a[i][2]==root) continue; int u = 1+seg.get(a[i][0], a[i][1]+1); dis[a[i][2]] = u; seg.update(a[i][1], u); } return dis[to]; } int32_t main(){ ios_base::sync_with_stdio(0);cin.tie(0); cin >> n >> q; a.resize(n); map<int,int> mp; for (int i=0;i<n;i++){ int s, e; cin >> s >> e; mp[s]; mp[e]; b[i] = {s, e}; } int cnt = 0; for (auto &it : mp) { it.S = cnt++; } for (int i=0;i<n;i++){ b[i] = {mp[b[i].F], mp[b[i].S]}; a[i] = {b[i].F, b[i].S, i}; } sort(all(a),cmp); while (q--){ int s, e; cin >> s >> e; s--;e--; memset(dis, 0x3f, sizeof(dis)); seg.init(); int ans = solve(s, e); if (ans>n) cout << "impossible\n"; else cout << ans << endl; } }
#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...