Submission #1034812

#TimeUsernameProblemLanguageResultExecution timeMemory
1034812RecursiveCoFire (BOI24_fire)C++17
13 / 100
385 ms116904 KiB
// CF template, version 3.0 #include <bits/stdc++.h> using namespace std; #define improvePerformance ios_base::sync_with_stdio(false); cin.tie(0) #define getTest int t; cin >> t #define eachTest for (int _var=0;_var<t;_var++) #define get(name) int (name); cin >> (name) #define out(o) cout << (o) #define getList(cnt, name) vector<int> (name); for (int _=0;_<(cnt);_++) { get(a); (name).push_back(a); } #define sortl(name) sort((name).begin(), (name).end()) #define rev(name) reverse((name).begin(), (name).end()) #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++) #define decision(b) if (b){out("YES");}else{out("NO");} #define int long long int template <typename T, typename I> struct segtree { int n; vector<T> tree; vector<I> initial; T id; segtree(int i_n, vector<I> i_initial, T i_id): n(i_n), initial(i_initial), id(i_id) { tree.resize(4 * n); } T conquer(T left, T right) { // write your conquer function } T value(I inp) { // write your value function } void build(int v, int l, int r) { if (l == r) tree[v] = value(initial[l]); else { int middle = (l + r) / 2; build(2 * v, l, middle); build(2 * v + 1, middle + 1, r); tree[v] = conquer(tree[2 * v], tree[2 * v + 1]); } } void upd(int v, int l, int r, int i, I x) { if (l == r) tree[v] = value(x); else { int middle = (l + r) / 2; if (middle >= i) upd(2 * v, l, middle, i, x); else upd(2 * v + 1, middle + 1, r, i, x); tree[v] = conquer(tree[2 * v], tree[2 * v + 1]); } } T query(int v, int l, int r, int ql, int qr) { if (ql <= l && r <= qr) return tree[v]; else if (r < ql || qr < l) return id; int middle = (l + r) / 2; T left = query(2 * v, l, middle, ql, qr); T right = query(2 * v + 1, middle + 1, r, ql, qr); return conquer(left, right); } }; // vector<int> vector<vector<int>> lift; vector<int> go; int calc(int l, int r) { int d = l; int ret = 0; while (d < r) { if (go[d] == d) break; d = lift[d][0]; ret++; } /*out(l); out(" "); out(r); out(" "); out(d); out(endl);*/ if (d >= r) return ret; return 1e18; } signed main() { improvePerformance; //getTest; //eachTest { get(n); get(m); vector<pair<int, int>> ranges; vector<pair<int, int>> wraps; vector<int> vals; int r = 0; int w = 0; forto(n, i) { get(s); get(e); vals.push_back(s); vals.push_back(e); if (s < e) ranges.push_back({s, e}), r++; else wraps.push_back({e, s}), w++; } vals.push_back(0); vals.push_back(m - 1); map<int, int> coords; sortl(vals); int ind = 0; int s = vals.size(); forto(s, i) { if (i == 0 || vals[i] != vals[i - 1]) coords[vals[i]] = ind++; } int N = ind; forto(r, i) { ranges[i].first = coords[ranges[i].first]; ranges[i].second = coords[ranges[i].second]; } forto(w, i) { wraps[i].first = coords[wraps[i].first]; wraps[i].second = coords[wraps[i].second]; } int maxwrap = 0; forto(w, i) maxwrap = max(maxwrap, wraps[i].first); int minwrap = N; forto(w, i) minwrap = min(minwrap, wraps[i].second); sortl(ranges); go.resize(N); int maxi = 0; int ptr = 0; forto(N, i) { while (ptr < r && ranges[ptr].first <= i) maxi = max(maxi, ranges[ptr++].second); maxi = max(maxi, i); go[i] = maxi; } lift.resize(N, vector<int>(20)); for (int i = N - 1; i >= 0; i--) { lift[i][0] = go[i]; forto(20, j) { if (j == 0) continue; lift[i][j] = lift[lift[i][j - 1]][j - 1]; } } int ans = 1e18; int onlyrng = 0; ind = 0; while (ind < N && go[ind] != ind) onlyrng++, ind = go[ind]; if (go[ind] != ind) ans = min(ans, onlyrng); sortl(wraps); rev(wraps); int indone = N; ptr = 0; forto(maxwrap + 1, i) { int two = calc(i, minwrap) + 2; while (ptr < w && wraps[ptr].first >= i) indone = min(indone, wraps[ptr++].second); int one = calc(i, indone) + 1; ans = min({ans, one, two}); } if (ans == 1e18) out(-1); else out(ans); //} }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:10:23: warning: unnecessary parentheses in declaration of 'n' [-Wparentheses]
   10 | #define get(name) int (name); cin >> (name)
      |                       ^
Main.cpp:97:9: note: in expansion of macro 'get'
   97 |         get(n);
      |         ^~~
Main.cpp:10:23: warning: unnecessary parentheses in declaration of 'm' [-Wparentheses]
   10 | #define get(name) int (name); cin >> (name)
      |                       ^
Main.cpp:98:9: note: in expansion of macro 'get'
   98 |         get(m);
      |         ^~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
      |                                   ^
Main.cpp:104:9: note: in expansion of macro 'forto'
  104 |         forto(n, i) {
      |         ^~~~~
Main.cpp:10:23: warning: unnecessary parentheses in declaration of 's' [-Wparentheses]
   10 | #define get(name) int (name); cin >> (name)
      |                       ^
Main.cpp:105:13: note: in expansion of macro 'get'
  105 |             get(s);
      |             ^~~
Main.cpp:10:23: warning: unnecessary parentheses in declaration of 'e' [-Wparentheses]
   10 | #define get(name) int (name); cin >> (name)
      |                       ^
Main.cpp:106:13: note: in expansion of macro 'get'
  106 |             get(e);
      |             ^~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
      |                                   ^
Main.cpp:118:9: note: in expansion of macro 'forto'
  118 |         forto(s, i) {
      |         ^~~~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
      |                                   ^
Main.cpp:122:9: note: in expansion of macro 'forto'
  122 |         forto(r, i) {
      |         ^~~~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
      |                                   ^
Main.cpp:126:9: note: in expansion of macro 'forto'
  126 |         forto(w, i) {
      |         ^~~~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
      |                                   ^
Main.cpp:131:9: note: in expansion of macro 'forto'
  131 |         forto(w, i) maxwrap = max(maxwrap, wraps[i].first);
      |         ^~~~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
      |                                   ^
Main.cpp:133:9: note: in expansion of macro 'forto'
  133 |         forto(w, i) minwrap = min(minwrap, wraps[i].second);
      |         ^~~~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
      |                                   ^
Main.cpp:138:9: note: in expansion of macro 'forto'
  138 |         forto(N, i) {
      |         ^~~~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'j' [-Wparentheses]
   15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
      |                                   ^
Main.cpp:146:13: note: in expansion of macro 'forto'
  146 |             forto(20, j) {
      |             ^~~~~
Main.cpp:15:35: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   15 | #define forto(name, var) for (int (var) = 0; (var) < (name); (var)++)
      |                                   ^
Main.cpp:160:9: note: in expansion of macro 'forto'
  160 |         forto(maxwrap + 1, i) {
      |         ^~~~~
#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...