Submission #523364

#TimeUsernameProblemLanguageResultExecution timeMemory
523364blueOsumnjičeni (COCI21_osumnjiceni)C++17
110 / 110
417 ms40496 KiB
#include <iostream> #include <vector> #include <set> using namespace std; using vi = vector<int>; using pii = pair<int, int>; using vvi = vector<vi>; const int lg = 18; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; int l[1+n], r[1+n]; for(int i = 1; i <= n; i++) cin >> l[i] >> r[i]; vvi nxt(1+n+1, vi(1+lg, 1+n)); set<pii> S; int y = 0; for(int x = 1; x <= n; x++) { if(y < x) { y = x; S.insert({l[x], r[x]}); } while(1) { bool bad = 0; pii z; if(y+1 > n) bad = 1; else { // cerr << "#\n"; z = {l[y+1], r[y+1]}; auto it = S.lower_bound(z); if(it != S.end() && it->first <= r[y+1]) bad = 1; // cerr << "bad1 = " << bad << '\n'; if(it != S.begin()) { it--; // cerr << it->first << " " << it->second << " : " << l[x] if(it->second >= l[y+1]) bad = 1; } } // cerr << x << ' ' << y+1 << ' ' << bad << '\n'; if(bad) { nxt[x][0] = y+1; break; } else { y++; S.insert(z); } } S.erase({l[x], r[x]}); } // for(int i = 1; i <= n; i++) cerr << nxt[i][0] << '\n'; for(int e = 1; e <= lg; e++) for(int i = 1; i <= n; i++) nxt[i][e] = nxt[ nxt[i][e-1] ][e-1]; int q; cin >> q; for(int j = 1; j <= q; j++) { int l, r; cin >> l >> r; r++; int res = 0; for(int e = lg; e >= 0; e--) { if(nxt[l][e] >= r) continue; // cerr << l << " -> " << nxt[l][e] << ' ' << (1<<e) << '\n'; res += (1<<e); l = nxt[l][e]; } res += 1; cout << res << '\n'; } }
#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...