Submission #1171185

#TimeUsernameProblemLanguageResultExecution timeMemory
1171185KhanhDangRailway Trip 2 (JOI22_ho_t4)C++17
100 / 100
544 ms51868 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll, ll> #define pii pair<int, int> #define fi first #define se second #define all(v) (v).begin(),(v).end() #define Unique(v) sort(all(v)); (v).erase(unique(all(v)), (v).end()); const int N = 1e5 + 5; int n, k, m, q; int L[20][N], R[20][N]; pii st[20][4 * N]; pii GET(pii a, pii b) { return {min(a.fi, b.fi), max(a.se, b.se)}; } void build(int lg, int id, int l, int r) { if (l == r) { st[lg][id] = {L[lg][l], R[lg][l]}; return; } int mid = l + r >> 1; build(lg, id << 1, l, mid); build(lg, id << 1 | 1, mid + 1, r); st[lg][id] = GET(st[lg][id << 1], st[lg][id << 1 | 1]); } pii get(int lg, int id, int l, int r, int u, int v) { if (v < l || r < u) return {n + 1, 0}; if (u <= l && r <= v) return st[lg][id]; int mid = l + r >> 1; return GET(get(lg, id << 1, l, mid, u, v), get(lg, id << 1 | 1, mid + 1, r, u, v)); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define task "task" if (fopen(task".INP", "r")) { freopen(task".INP", "r", stdin); freopen(task".OUT", "w", stdout); } if (fopen("task.INP", "r")) { freopen("task.INP", "r", stdin); freopen("task.OUT", "w", stdout); } cin>>n>>k>>m; for (int i = 1; i <= n; i++) for (int j = 0; j < 18; j++) L[j][i] = R[j][i] = i; for (int i = 1; i <= m; i++) { int a, b; cin>>a>>b; L[0][a] = min(L[0][a], b); R[0][a] = max(R[0][a], b); } build(0, 1, 1, n); for (int i = 1; i <= n; i++) { auto [u, v] = get(0, 1, 1, n, max(1, i - k + 1), i); R[0][i] = v; auto [x, y] = get(0, 1, 1, n, i, min(n, i + k - 1)); L[0][i] = x; } build(0, 1, 1, n); for (int lg = 1; lg < 18; lg++) { for (int i = 1; i <= n; i++) { auto [u, v] = get(lg - 1, 1, 1, n, L[lg - 1][i], R[lg - 1][i]); L[lg][i] = u; R[lg][i] = v; } build(lg, 1, 1, n); } cin>>q; while (q--) { int s, t; cin>>s>>t; int _l = s, _r = s; int ans = 0; for (int i = 17; i >= 0; i--) { auto [u, v] = get(i, 1, 1, n, _l, _r); if (t < u || v < t) { ans += 1 << i; _l = u, _r = v; } } auto [u, v] = get(0, 1, 1, n, _l, _r); if (u <= t && t <= v) cout<<ans + 1<<'\n'; else cout<<-1<<'\n'; } cerr<<setprecision(3)<<fixed<<"Time elapsed: "<< 1.0 * clock() / CLOCKS_PER_SEC <<"s\n"; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:40:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |         freopen(task".INP", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:41:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |         freopen(task".OUT", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:44:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |         freopen("task.INP", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:45:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |         freopen("task.OUT", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...