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

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

Language: cpp

Time: 0.282 second

Submitted On: 2025-06-11 00:21:03

#include<bits/stdc++.h>

#pragma GCC optimize("Ofast", "unroll-loops")
#pragma GCC target("avx2")

using namespace std;

const int maxn = 1e5 + 5;
const int maxu = 1005;

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

struct FW{
	int tr[maxn] = {};
	void update(int i, int val){
		for(;i<maxn;i+=i&-i) tr[i] = max(tr[i], val);
	}
	int query(int i){
		int mx = 0;
		for(;i>0;i-=i&-i) mx = max(mx, tr[i]);
		return mx;
	}
};

int u, k, n;
stc crys[maxn];
vector<int> vec;
map<int, int> compr;
int res = 0;
FW fw[maxu];

int main(){
	ios_base::sync_with_stdio(0);cin.tie(0);
	cin >> u >> k >> n;
	vec.reserve(n);
	for(int i=0;i<n;++i){
		cin >> crys[i].p >> crys[i].w >> crys[i].t;
		vec.emplace_back(crys[i].p);
	}
	sort(vec.begin(), vec.end());
	vec.erase(unique(vec.begin(), vec.end()), vec.end());
	sort(crys, crys+n);
	for(int i=0;i<vec.size();++i){
		compr[vec[i]] = i+1;
	}
	for(int i=0;i<n;++i){
		int p = crys[i].p, w = crys[i].w, t = crys[i].t, compp = compr[p];
		int mx = fw[w].query(compp - 1) + 1;
		mx = max(mx, fw[maxu-1].query(compp - 1) - k + 1);
		res = max(res, mx);
		fw[maxu-1].update(compp, mx);
		fw[w].update(compp, mx);
	}
	cout << res;
}