Submission #1023780

#TimeUsernameProblemLanguageResultExecution timeMemory
1023780vjudge1Osumnjičeni (COCI21_osumnjiceni)C++17
110 / 110
523 ms33212 KiB
#include<bits/stdc++.h> using namespace std; const int N = 200'000 + 50, K = 20; int n, q, l[N], r[N], par[N][K]; set<pair<int, int> > st; bool check(int l, int r) { if(st.empty()) return true; auto it = st.upper_bound({r, 0}); if(it != st.end() && it->second <= r) return false; if(it != st.begin()) { it--; if(l <= it->first) return false; } return true; } int main() { cin >> n; for(int i = 0; i < n; i ++) cin >> l[i] >> r[i]; int j = 0; for(int i = 0; i < n; i ++) { while(j < n && check(l[j], r[j])) st.insert({r[j], l[j]}), j++; par[i][0] = j; st.erase({r[i], l[i]}); } for(int i = K - 1; i >= 0; i --) par[n][i] = n; for(int i = n - 1; i >= 0; i --) for(int l = 1; l < K; l++) par[i][l] = par[par[i][l - 1]][l -1]; // cerr << par[0][0] << endl; cin >> q; while(q--) { int a, b; cin >> a >> b; a--; int ans = 0; for(int i = K - 1; i >= 0; i --) if(par[a][i] < b) ans += (1 << i), a = par[a][i]; cout << ans + 1 << endl; } return 0; }
#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...