Submission

Status:

(PPPP)(PPP)(PPPP)(PPPPPPP)(PPPPPPP)(PPPPPPPPPPP)(PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP)

Subtask/Task Score:

{9/9}{5/5}{6/6}{11/11}{14/14}{25/25}{30/30}

Score: 100

User: navysrimuang

Problemset: ผลึกเวลา (Crystal)

Language: cpp

Time: 0.292 second

Submitted On: 2026-04-26 23:33:55

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

int dp[100001]; 
int BIT[1001][100001];
int U,K,N;

void update(int i, int x, int u){
    for(;i<=N;i+=i&-i) BIT[u][i] = max(BIT[u][i], x);
}

int qr(int i, int u){
   int sum = INT_MIN; 
   for(;i > 0;i-=i&-i) sum = max(sum, BIT[u][i]);
   return sum;
}

int main(){
    cin.tie(0)->sync_with_stdio(0);
    cin >> U >> K >> N;
    vector<tuple<int,int,int>> v(N); //t, p, u
    for(int i = 0;i<N;i++){
        int p,w,t;
        cin >> p >> w >> t;
        v[i] = {t,p,w};
    }    

    sort(v.begin(), v.end());

    int ii = 1;
    for(auto& [t,p,w] : v) t = ii++;

    sort(v.begin(), v.end() ,[](auto a, auto b){
        return get<1>(a) < get<1>(b);
    });

    int ans = 0;

    for(auto [t,p,w] : v){

        int dp = max(qr(t, w), qr(t, U) - K) + 1;         
        ans = max(ans, dp);

        update(t, dp, w);
        update(t, dp, U);

    }

    cout << ans << "\n";
    return 0;
}