結果
問題 | No.1826 Fruits Collecting |
ユーザー | torisasami4 |
提出日時 | 2021-11-14 21:27:52 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,132 ms / 2,000 ms |
コード長 | 1,206 bytes |
コンパイル時間 | 4,204 ms |
コンパイル使用メモリ | 265,512 KB |
最終ジャッジ日時 | 2025-01-25 18:00:57 |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 43 |
ソースコード
#include <atcoder/all> #include <bits/stdc++.h> using namespace std; using namespace atcoder; using mint = modint998244353; typedef long long ll; #define pb(...) emplace_back(__VA_ARGS__) #define all(x) x.begin(), x.end() #define rep(i, n) for (int i = 0; i < (n); i++) ll f(ll a, ll b) { return max(a, b); } ll e() { return (ll)-1e15; } int main() { int n; cin >> n; vector<ll> t(n), x(n), v(n); rep(i, n) cin >> t[i] >> x[i] >> v[i]; vector<ll> a(n), b(n); rep(i, n) a[i] = t[i] + x[i], b[i] = t[i] - x[i]; map<ll, int> ma, mb; ma[0] = 1, mb[0] = 1; rep(i, n) ma[a[i]] = 1, mb[b[i]] = 1; int sz_a = 0, sz_b = 0; for (auto &e : ma) e.second = sz_a++; for (auto &e : mb) e.second = sz_b++; rep(i, n) a[i] = ma[a[i]], b[i] = mb[b[i]]; segtree<ll, f, e> seg(sz_b); vector<pair<ll, pair<ll, ll>>> vec; rep(i, n) if (a[i] >= ma[0]) vec.push_back({a[i], {b[i], v[i]}}); sort(all(vec)); seg.set(mb[0], 0); ll ans = 0; for (auto [p, q] : vec) { auto [nb, nv] = q; ll val = seg.prod(0, nb + 1) + nv; seg.set(nb, max(seg.get(nb), val)); } cout << seg.prod(0, sz_b) << endl; }