Submission #925205

#TimeUsernameProblemLanguageResultExecution timeMemory
925205awuPassport (JOI23_passport)C++14
0 / 100
1 ms604 KiB
#include <bits/extc++.h> using namespace __gnu_pbds; using namespace std; // #define int long long #define ll long long // #define double long double #define all(x) x.begin(), x.end() #define debug(x) do{auto _x = x; cerr << #x << " = " << _x << endl;} while(0) #define f first #define s second // #define endl '\n' using pii = pair<int, int>; using pll = pair<ll, ll>; const int inf = 1 << 29; // const ll inf = 1ll << 50; const int MOD = 1e9 + 7; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int s = 1; while(s < n) s *= 2; vector<vector<int>> adj(s * 2); // reversed edges vector<int> s1, sn; for(int i = 0; i < n; i++) { int l, r; cin >> l >> r; l--; if(l == 0) s1.push_back(i); if(r == n) sn.push_back(i); auto add = [&](int a, int b) { adj[a].push_back(b); }; for(l += s, r += s; l < r; l /= 2, r /= 2) { if(l & 1) add(l++, s + i); if(r & 1) add(--r, s + i); } } vector<deque<int>> q(n * 4); auto dijk = [&](vector<int>& d) { int cd = 0; while(true) { while(cd < q.size() && q[cd].empty()) cd++; if(cd == q.size()) break; auto cur = q[cd].front(); q[cd].pop_front(); if(d[cur] <= cd) continue; d[cur] = cd; for(auto i : adj[cur]) { q[cd + 1].push_back(i); } if(cur > 1) q[cd].push_back(cur / 2); } }; for(auto i : s1) { q[0].push_back(s + i); } vector<int> d1(s * 2, inf); dijk(d1); for(auto i : sn) { q[0].push_back(s + i); } vector<int> dn(s * 2, inf); dijk(dn); vector<int> d(s * 2, inf); for(int i = 0; i < n; i++) { int dist = d1[s + i] + dn[s + i]; if(dist == inf) continue; q[dist].push_back(s + i); } dijk(d); int Q; cin >> Q; while(Q--) { int x; cin >> x; x--; cout << (d[s + x] == inf ? -1 : d[s + x] + 1) << endl; } }

Compilation message (stderr)

passport.cpp: In lambda function:
passport.cpp:46:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::deque<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |       while(cd < q.size() && q[cd].empty()) cd++;
      |             ~~~^~~~~~~~~~
passport.cpp:47:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::deque<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |       if(cd == q.size()) break;
      |          ~~~^~~~~~~~~~~
#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...