結果
| 問題 | No.674 n連勤 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-09-01 01:50:01 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 22 ms / 2,000 ms |
| コード長 | 2,569 bytes |
| 記録 | |
| コンパイル時間 | 1,811 ms |
| コンパイル使用メモリ | 201,596 KB |
| 最終ジャッジ日時 | 2025-02-24 03:38:42 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 |
ソースコード
#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';
}
}