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: nozmid

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

Language: cpp

Time: 0.291 second

Submitted On: 2026-04-25 14:19:13

#include <bits/stdc++.h>

using namespace std;

#define pii pair<int, int>
#define F first
#define S second

const int maxn = 1e5 + 5;
const int maxu = 1005;
const int inf = 2e9;

struct stc{
	int p, w, t;
	bool operator<(const stc &o) const{
		return p < o.p;
	}
};

int u, k, n;
pii arr[maxn];
stc crys[maxn];
int fw[maxu][maxn];
int res = -inf;

void upd(int i, int val, int t[]){
	for(;i<=n;i+=i&-i) t[i] = max(t[i], val);
}

int qr(int i, int t[]){
	int s = -inf;
	for(;i>0;i-=i&-i) s = max(s, t[i]);
	return s;
}

int main(){
	ios_base::sync_with_stdio(0);cin.tie(0);
	cin >> u >> k >> n;
	for(int i=1;i<=n;++i){
		cin >> crys[i].p >> crys[i].w >> arr[i].F;
		arr[i].S = i;
	}
	sort(arr+1, arr+n+1);
	for(int i=1;i<=n;++i) crys[arr[i].S].t = i;
	sort(crys+1, crys+n+1);
	for(int i=1;i<=n;++i){
		auto [np, nu, nt] = crys[i];
		int mx = max(qr(nt, fw[nu]), qr(nt, fw[u]) - k) + 1;
		res = max(res, mx);
		upd(nt, mx, fw[nu]);
		upd(nt, mx, fw[u]);
	}
	cout << res;
}