結果

問題 No.3424 Shooting Game
コンテスト
ユーザー Guran08
提出日時 2025-12-10 23:48:34
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
結果
AC  
実行時間 371 ms / 2,000 ms
コード長 1,056 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 3,376 ms
コンパイル使用メモリ 347,840 KB
実行使用メモリ 31,484 KB
最終ジャッジ日時 2026-01-11 17:21:08
合計ジャッジ時間 6,536 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 11
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main(void) {
    int N, T; cin >> N >> T;
    vector<int> L(N), R(N);
    vector<ll> P(N);
    for (int i = 0; i < N; i++) {
        cin >> L[i] >> R[i] >> P[i];
    }

    vector<vector<ll>> add(200009), rem(200009);
    for (int i = 0;i < N;i++) {
        add[L[i]].push_back(P[i]);
        rem[R[i] + 1].push_back(P[i]);
    }

    multiset<ll> s;
    vector<ll> mx;
    for (int i = 0;i <= 200000;i++) {
        for (auto v : add[i])s.insert(v);
        if (s.empty())mx.push_back(0);
        else mx.push_back(*s.rbegin());
        for (ll v : rem[i]) {
            auto it = s.find(v);
            if (it != s.end())s.erase(it);
        }
    }
    vector<ll> dp(400009, -(1LL << 60));
    dp[0] = 0;
    int rmx = *max_element(R.begin(), R.end());
    for (int i = 0; i <= 200000; i++) {
        if (i <= rmx)dp[i + T] = max(dp[i + T], dp[i] + mx[i]);
        dp[i + 1] = max(dp[i + 1], dp[i]);
    }
    ll ans = *max_element(dp.begin(), dp.end());
    cout << ans << "\n";
}
0