Submission #864213

#TimeUsernameProblemLanguageResultExecution timeMemory
864213prairie2022Railway Trip 2 (JOI22_ho_t4)C++17
100 / 100
321 ms259384 KiB
#include<bits/stdc++.h> typedef long long ll; #define fastio cin.tie(0), cout.tie(0), ios::sync_with_stdio(0); using namespace std; #define pii pair<int, int> #define F first #define S second inline pii operator+(pii p1, pii p2){ return {min(p1.F, p2.F), max(p1.S, p2.S)}; } vector<vector<vector<pii>>> table; // __lg(#train), __lg(range), range_left void build(int n, int k){ int m, a, b; vector<vector<int>> l(n+1), r(n+1); for(cin >> m; m; m--){ cin >> a >> b; if(a<b){ l[a].push_back(b); r[min(a+k-1, b-1)].push_back(b); } else{ l[max(a-k+1, b+1)].push_back(b); r[a].push_back(b); } } multiset<int> s; for(int i=1; i<=n; i++){ for(const int &st: l[i]) s.insert(st); if(!s.empty()) table[0][0][i] = {min(i, *s.begin()), max(i, *s.rbegin())}; else table[0][0][i] = {i, i}; for(const int &st: r[i]) s.erase(s.find(st)); } } inline pii get(int t, pii p){ p.S++; int tmp = __lg(p.S-p.F); return table[t][tmp][p.F]+table[t][tmp][p.S-(1<<tmp)]; } inline bool out(int t, pii p){ return p.F>t || t>p.S; } int main(){ fastio int n, k, y, q, s, t; cin >> n >> k; y = __lg(n)+1; table.assign(y+1, vector<vector<pii>>(y, vector<pii>(n+1))); build(n, k); // sprase table for(int t=0; t<=y; t++){ if(t){ for(int i=1; i<=n; i++) table[t][0][i] = get(t-1, table[t-1][0][i]); } for(int j=0; j<y-1; j++){ for(int i=1; i<=n-(1<<j); i++) table[t][j+1][i] = table[t][j][i]+table[t][j][i+(1<<j)]; } } // query for(cin >> q; q; q--){ cin >> s >> t; if(out(t, table[y][0][s])){ cout << "-1\n"; continue; } int ans = 0; pii cur = {s, s}; for(int tt=y-1; tt>-1; tt--){ pii tmp = get(tt, cur); if(out(t, tmp)){ ans ^= 1<<tt; cur = tmp; } } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...