Submission #1080342

#TimeUsernameProblemLanguageResultExecution timeMemory
1080342raphaelpFire (BOI24_fire)C++14
0 / 100
1 ms436 KiB
#include <bits/stdc++.h> using namespace std; int main() { int N, M; cin >> N >> M; vector<vector<int>> Tab; vector<pair<int, int>> input; for (int i = 0; i < N; i++) { int l, r; cin >> l >> r; input.push_back({l, r}); if (r >= l) { Tab.push_back({l, r, i}); Tab.push_back({l + M, r + M, i}); } else { Tab.push_back({l, r + M, i}); } } sort(Tab.begin(), Tab.end()); int last = -1; vector<int> removed(Tab.size()); for (int i = 0; i < Tab.size(); i++) { if (last != -1) { if (Tab[last][1] >= Tab[i][1]) removed[i] = 1; } if (removed[i] == 0) last = i; } vector<vector<int>> Tab2; for (int i = 0; i < Tab.size(); i++) if (!removed[i]) Tab2.push_back(Tab[i]); swap(Tab, Tab2); vector<vector<pair<int, int>>> next(log2(N) + 1, vector<pair<int, int>>(N)); for (int i = Tab.size() - 1; i >= 0; i--) { int x = lower_bound(Tab.begin(), Tab.end(), vector<int>{Tab[i][1] + 1}) - Tab.begin() - 1; if (x != i) { next[0][Tab[i][2]].first = Tab[x][2]; next[0][Tab[i][2]].second = Tab[x][1] - Tab[i][1]; } } for (int i = 1; i <= log2(N); i++) { for (int j = 0; j < N; j++) { next[i][j].first = next[i - 1][next[i - 1][j].first].first; next[i][j].second = next[i - 1][j].second + next[i - 1][next[i - 1][j].first].second; } } int best = 1000000000; for (int i = 0; i < N; i++) { int x = i, compte = 0, dist = 0; for (int j = log2(N); j >= 0; j--) { if (dist + next[j][x].second < M) { dist += next[j][x].second; x = next[j][x].first; compte += (1 << j); } } if (dist + next[0][x].second >= M) best = min(best, compte + 1); } cout << ((best == 1000000000) ? -1 : best); }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:27:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |     for (int i = 0; i < Tab.size(); i++)
      |                     ~~^~~~~~~~~~~~
Main.cpp:38:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     for (int i = 0; i < Tab.size(); 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...