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: exoworldgd
Problemset: ผลึกเวลา (Crystal)
Language: cpp
Time: 0.390 second
Submitted On: 2025-11-09 00:17:08
#pragma GCC optimize("O5,unroll-loops,inline")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#include <bits/stdc++.h>
#define exoworldgd cin.tie(0)->sync_with_stdio(0), cout.tie(0)
#define int long long
using namespace std;
const int inf = LLONG_MAX, mod = 1e9+7, maxn = 1e5+5;
int fen[1005][maxn];
signed main(void) {
exoworldgd;
int u,k,n,res=0;
cin >> u >> k >> n;
tuple<int,int,int> a[n];
vector<int> v;
map<int,int> cmp;
for (auto& [r,p,q] : a) cin >> p >> q >> r, v.push_back(p);
sort(a,a+n), sort(v.begin(),v.end()), v.erase(unique(v.begin(),v.end()),v.end());
for (int i = 0; i < v.size(); i++) cmp[v[i]] = i+1;
for (auto [r,p,q] : a) {
int idx = cmp[p], mx=0, temp=0;
for (int i = idx-1; i > 0; i -= i&-i) mx = max(mx,fen[q][i]);
for (int i = idx-1; i > 0; i -= i&-i) temp = max(temp,fen[u][i]);
mx = max(mx+1, temp >= k ? temp+1-k : 0);
for (int i = idx; i <= v.size(); i += i&-i) fen[q][i] = max(fen[q][i],mx);
for (int i = idx; i <= v.size(); i += i&-i) fen[u][i] = max(fen[u][i],mx);
res = max(res,mx);
}
cout << res;
}