結果
問題 | No.674 n連勤 |
ユーザー | Nzt3 |
提出日時 | 2024-09-01 01:50:01 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 25 ms / 2,000 ms |
コード長 | 2,569 bytes |
コンパイル時間 | 2,284 ms |
コンパイル使用メモリ | 210,852 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-01 01:50:05 |
合計ジャッジ時間 | 3,795 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
6,812 KB |
testcase_01 | AC | 2 ms
6,944 KB |
testcase_02 | AC | 2 ms
6,940 KB |
testcase_03 | AC | 2 ms
6,944 KB |
testcase_04 | AC | 2 ms
6,944 KB |
testcase_05 | AC | 2 ms
6,944 KB |
testcase_06 | AC | 2 ms
6,940 KB |
testcase_07 | AC | 2 ms
6,940 KB |
testcase_08 | AC | 2 ms
6,944 KB |
testcase_09 | AC | 1 ms
6,940 KB |
testcase_10 | AC | 2 ms
6,940 KB |
testcase_11 | AC | 2 ms
6,940 KB |
testcase_12 | AC | 3 ms
6,944 KB |
testcase_13 | AC | 11 ms
6,940 KB |
testcase_14 | AC | 13 ms
6,944 KB |
testcase_15 | AC | 11 ms
6,940 KB |
testcase_16 | AC | 24 ms
6,944 KB |
testcase_17 | AC | 25 ms
6,940 KB |
testcase_18 | AC | 18 ms
6,940 KB |
testcase_19 | AC | 12 ms
6,940 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; constexpr int MOD = 998244353; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rep2(i, l, r) for (int i = (l); i < (int)(r); i++) namespace Lib { struct range_set { using all2 = array<long long, 2>; static constexpr ll minf = numeric_limits<ll>::min(); static constexpr ll pinf = numeric_limits<ll>::max(); set<all2> intervals; int add(all2 a) { auto [l, r] = a; int ret = 1; // 既存の区間に完全に包含される場合 { auto it = intervals.upper_bound(all2({l, pinf})); if (it != intervals.begin()) { it--; if ((*it)[1] >= r) return 0; if ((*it)[1] >= l) l = (*it)[0]; } } auto it = intervals.lower_bound(all2({l, minf})); while (1) { if (it != intervals.end() && (*it)[0] <= r) { r = max(r, (*it)[1]); auto it2 = it; it++; intervals.erase(it2); ret -= 1; } else { break; } } intervals.insert({l, r}); return ret; } int erase(all2 a) { auto [l, r] = a; int ret = 0; { auto it = intervals.lower_bound(all2({l, minf})); if (it != intervals.begin()) { it--; if ((*it)[1] > l) { auto [l2, r2] = *it; intervals.erase(it); intervals.insert({l2, l}); if (r2 > r) { intervals.insert({r, r2}); ret += 1; } } } } auto it = intervals.lower_bound(all2({l, minf})); while (1) { if (it != intervals.end() && (*it)[1] <= r) { auto it2 = it; it++; intervals.erase(it2); ret -= 1; } else { break; } } if (it != intervals.end() && (*it)[0] < r) { auto [l2, r2] = *it; intervals.erase(it); intervals.insert({r, r2}); } return ret; } pair<bool, all2> cover(all2 b) { auto [l, r] = b; auto it = intervals.upper_bound(all2({l, pinf})); if (it != intervals.begin()) { it--; if ((*it)[0] <= l && r <= (*it)[1]) { all2 ret = *it; return make_pair(true, ret); } } return make_pair(false, all2({0, 0})); } }; } // namespace Lib int main() { ios::sync_with_stdio(false); cin.tie(nullptr); Lib::range_set S; ll D, Q; cin >> D >> Q; ll ans = 0; while (Q--) { ll A, B; cin >> A >> B; S.add({A, B + 1}); auto [ok, lr] = S.cover({A, A + 1}); assert(ok); ans = max(ans, lr[1] - lr[0]); cout << ans << '\n'; } }