Submission #1261228

#TimeUsernameProblemLanguageResultExecution timeMemory
1261228SzymonKrzywdaPassport (JOI23_passport)C++20
54 / 100
2095 ms79344 KiB
#pragma GCC optimize("O3,unroll-loops,Ofast") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include <bits/stdc++.h> using namespace std; using pii = pair<int,int>; const int base = 1 << 18; const int MAXN = 2 * base; const int INF = 1e9; int wygrana = 0; int n, a, b; vector<pii> prz; vector<pii> graf2[MAXN]; int dist[MAXN], vis[MAXN], timer = 0; vector<int> bfs01(int start) { timer++; deque<int> dq; for (int i = 0; i < MAXN; i++) dist[i] = INF; if (start != wygrana) { for (int i = 0; i < n; i++) { if (prz[i].first <= start - base && prz[i].second >= start - base) { dist[i + base] = 0; vis[i + base] = timer; dq.push_back(i + base); } } } dist[start] = 0; vis[start] = timer; dq.push_back(start); while (!dq.empty()) { int v = dq.front(); dq.pop_front(); for (auto &[s,w] : graf2[v]) { if (vis[s] != timer || dist[s] > dist[v] + w) { dist[s] = dist[v] + w; vis[s] = timer; if (w == 0) dq.push_front(s); else dq.push_back(s); } } } return vector<int>(dist, dist+MAXN); } void build(int v){ if (v >= base) return; graf2[v*2].push_back({v,0}); graf2[v*2+1].push_back({v,0}); build(v*2); build(v*2+1); } void dodaj(int idx, int a, int b){ a += base - 1; b += base + 1; idx += base; while (a/2 != b/2){ if (!(a&1)) graf2[a+1].push_back({idx,1}); if (b&1) graf2[b-1].push_back({idx,1}); a/=2; b/=2; } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n; build(1); for (int i=0;i<n;i++){ cin >> a >> b; a--; b--; dodaj(i,a,b); prz.push_back({a,b}); } vector<int> odl1 = bfs01(base); vector<int> odln = bfs01(base+n-1); for (int i = base; i < base+n; i++) graf2[wygrana].push_back({i, odl1[i] + odln[i]}); vector<int> odp = bfs01(wygrana); int q,val; cin >> q; while(q--){ cin >> val; int res = odp[base+val-1]; cout << (res>=INF ? -1 : res+1) << '\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...