結果
問題 | No.3094 Stapler |
ユーザー |
![]() |
提出日時 | 2025-04-13 16:28:13 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 397 ms / 2,000 ms |
コード長 | 1,676 bytes |
コンパイル時間 | 3,626 ms |
コンパイル使用メモリ | 285,512 KB |
実行使用メモリ | 31,412 KB |
最終ジャッジ日時 | 2025-06-20 02:35:19 |
合計ジャッジ時間 | 14,784 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 72 |
ソースコード
#include <bits/stdc++.h> #include <atcoder/lazysegtree> using namespace std; #define For(i, a, b) for(int i = (a); i < (b); i++) #define rep(i, n) For(i, 0, n) #define rFor(i, a, b) for(int i = (a); i >= (b); i--) #define ALL(v) (v).begin(), (v).end() #define rALL(v) (v).rbegin(), (v).rend() #define SZ(v) ((int)(v).size()) using lint = long long; using ld = long double; int INF = 2000000000; lint LINF = 1000000000000000000; struct SetupIo { SetupIo() { ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); } } setupio; struct S { int mn, cnt; }; S op(S a, S b) { if (a.mn != b.mn) { return a.mn < b.mn ? a : b; } return S{a.mn, a.cnt + b.cnt}; } S e() { return {INF, 0}; } S mpg(int f, S x) { return S{x.mn + f, x.cnt}; } int cmp(int f, int g) { return f + g; } int id() { return 0; } int main() { int n, q; cin >> n >> q; atcoder::lazy_segtree<S, op, e, int, mpg, cmp, id> seg(n - 1); rep(i, n - 1) { seg.set(i, S{0, 1}); } vector<pair<int, int>> qs; rep(i, q) { int t; cin >> t; if (t == 1) { int l, r; cin >> l >> r; l--; r--; seg.apply(l, r, 1); qs.emplace_back(l, r); } else if (t == 2) { int j; cin >> j; j--; auto [l, r] = qs[j]; seg.apply(l, r, -1); qs.emplace_back(-1, -1); } else { S sum = seg.all_prod(); cout << (sum.mn == 0 ? sum.cnt + 1 : 1) << "\n"; qs.emplace_back(-1, -1); } } }