結果

問題 No.3094 Stapler
ユーザー Tatsu_mr
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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);
        }
    }
}
0