結果
| 問題 | No.3424 Shooting Game |
| コンテスト | |
| ユーザー |
200508
|
| 提出日時 | 2026-01-11 15:16:09 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 469 ms / 2,000 ms |
| コード長 | 2,859 bytes |
| 記録 | |
| コンパイル時間 | 3,275 ms |
| コンパイル使用メモリ | 347,820 KB |
| 実行使用メモリ | 27,508 KB |
| 最終ジャッジ日時 | 2026-01-11 17:23:48 |
| 合計ジャッジ時間 | 7,322 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 11 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using vll = vector<ll>;
using pll = pair<ll,ll>;
#define rep(i,n) for(int i=0;i<(n);i++)
#define rrep(i,n) for(int i=(n)-1;0<=i;i--)
#define REP(i,n) for(int i=1;i<=n;i++)
#define all(a) a.begin(),a.end()
#define sort(a) sort(all(a))
#define rev(a) reverse(all(a))
char el='\n';
void YN(bool f){cout<<(f?"Yes":"No")<<"\n";}
template<typename T> bool chmin(T& x,T y){if(x>y){x=y;return true;}return false;}
template<typename T> bool chmax(T& x,T y){if(x<y){x=y;return true;}return false;}
template <typename T> istream &operator>>(istream &is, vector<T> &v){ for(T &in : v) is >> in; return is;}
template <typename T> ostream &operator<<(ostream &os, vector<T> &v){ rep(i,v.size()) os << v[i] << (i+1==v.size()?"":" "); return os;}
template<class T,class E,T op_id,E ef_id,T(*op)(T,T),void(*ch)(T&,E),void(*sy)(E&,E)>
struct LazySegmentTree{
private:
int n=1;
vector<T> k;
vector<E> lazy;
vector<bool> flag;
public:
void eval(int i,int l,int r){
if(flag[i]){
ch(k[i],lazy[i]);
if(l+1<r){
sy(lazy[2*i],lazy[i]);
sy(lazy[2*i+1],lazy[i]);
flag[2*i]=flag[2*i+1]=true;
}
flag[i]=false;
lazy[i]=ef_id;
}
}
void update(int a,int b,int i,int l,int r,E x){
eval(i,l,r);
if(r<=a||b<=l) return;
if(a<=l&&r<=b){
sy(lazy[i],x);
flag[i]=true;
eval(i,l,r);
}
else{
update(a,b,i*2,l,(l+r)/2,x);
update(a,b,i*2+1,(l+r)/2,r,x);
k[i]=op(k[i*2],k[i*2+1]);
}
}
void update(int a,int b,E x){
update(a,b,1,0,n,x);
}
T query(int a,int b,int i,int l,int r){
eval(i,l,r);
if(r<=a||b<=l) return op_id;
if(a<=l&&r<=b) return k[i];
T v1=query(a,b,i*2,l,(l+r)/2);
T v2=query(a,b,i*2+1,(l+r)/2,r);
return op(v1,v2);
}
T query(int a, int b) {
return query(a,b,1,0,n);
}
LazySegmentTree(vector<T> a){
int m=a.size();
while(n<m) n*=2;
k=vector<T>(n*2,op_id);
lazy=vector<E>(n*2,ef_id);
flag=vector<bool>(n*2,false);
rep(i,m) k[n+i]=a[i];
for(int i=n-1;0<i;i--) k[i]=op(k[i*2],k[i*2+1]);
}
};
ll mx(ll x,ll y){ return max(x,y); }
void mx(ll& x,ll y){ x = max(x,y); }
int main(){
int n, t; cin >> n >> t;
vll l(n), r(n), p(n);
rep(i,n) cin >> l[i] >> r[i] >> p[i];
int sz = 404040;
LazySegmentTree<ll,ll,0,0,mx,mx,mx> sg(vll(404040));
rep(i,n) sg.update(l[i], r[i]+1, p[i]);
vll dp(sz);
rep(i,sz){
if(i) chmax(dp[i], dp[i-1]);
if(i+t<sz) chmax(dp[i+t], dp[i]+sg.query(i,i+1));
}
cout << dp[sz-1] << el;
}
200508