Submission #507678

#TimeUsernameProblemLanguageResultExecution timeMemory
507678penguinhackerOsumnjičeni (COCI21_osumnjiceni)C++14
110 / 110
275 ms26808 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ar array const int mxN=2e5; int n, q, l[mxN], r[mxN], anc[mxN][18]; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i=0; i<n; ++i) cin >> l[i] >> r[i]; set<ar<int, 2>> s; for (int i=n-1, j=n-1; ~i; --i) { while(1) { if (s.empty()||r[i]<(*s.begin())[0]||l[i]>(*s.rbegin())[1]) { s.insert({l[i], r[i]}); break; } auto it=s.lower_bound({l[i], -1}); if ((it==s.end()||r[i]<(*it)[0])&&(it==s.begin()||(*prev(it))[1]<l[i])) { s.insert({l[i], r[i]}); break; } s.erase({l[j], r[j]}); --j; } anc[i][0]=j+1; } for (int j=1; j<18; ++j) for (int i=0; i<n; ++i) anc[i][j]=anc[i][j-1]==n?n:anc[anc[i][j-1]][j-1]; cin >> q; while(q--) { int a, b; cin >> a >> b, --a, --b; int ans=0; for (int i=17; ~i; --i) if (anc[a][i]<=b) { ans+=1<<i; a=anc[a][i]; } cout << ans+1 << "\n"; } 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...