Submission #1111528

#TimeUsernameProblemLanguageResultExecution timeMemory
1111528gelastropodFire (BOI24_fire)C++14
0 / 100
2076 ms592 KiB
#include<bits/stdc++.h> using namespace std; int M; vector<pair<int, int>> tree; void upd(int n, int x, int i) { while (n <= M) { if (tree[n].first < x) tree[n] = {x, i}; n += n & (-n); } } pair<int, int> qry(int a) { pair<int, int> ans = {-1, -1}; while (a > 0) { if (ans.first < tree[a].first) ans = tree[a]; a -= a & (-a); } return ans; } signed main() { int N, a, b; cin >> N >> M; tree = vector<pair<int, int>>(M + 1, {-1, -1}); set<pair<int, int>> pairss; vector<pair<int, int>> pairs; for (int i = 0; i < N; i++) { cin >> a >> b; if (a > b) b += M; pairss.insert({a, b}); } int counter = 0; while (!pairss.empty()) { pairs.push_back(*pairss.begin()); upd(pairss.begin()->first, pairss.begin()->second, counter); counter++; pairss.erase(pairss.begin()); } int anss = INT_MAX; for (int i = 0; i < pairs.size(); i++) { int num = 1; int ca = pairs[i].first, cb = pairs[i].second; int prev = i; while (cb - ca < M) { auto z = qry(min(cb, M)); if (z.first != -1 && z.second != prev && z.second != -1) { cb = z.first; num++; } else break; prev = z.second; } if (cb - ca >= M) anss = min(num, anss); } if (anss == INT_MAX) cout << "-1\n"; else cout << anss << '\n'; }

Compilation message (stderr)

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