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: Zonezonee
Problemset: ผลึกเวลา (Crystal)
Language: cpp
Time: 0.256 second
Submitted On: 2026-04-04 12:19:30
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10, U = 1e3+10;
struct fw{
int fw[N];
void upd(int idx, int val){
for(; idx < N; idx += idx&(-idx)) fw[idx] = max(fw[idx], val);
}
int query(int idx){
int res = 0;
for(; idx > 0; idx -= idx&(-idx)) res = max(res, fw[idx]);
return res;
}
} f[U];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int u, k, n;
cin >> u >> k >> n;
vector<tuple<int, int, int>> v;
vector<int> c;
for(int i = 1; i <= n; ++i){
int p, w, t;
cin >> p >> w >> t;
v.push_back({t, p, w});
c.push_back(p);
}
sort(c.begin(), c.end());
sort(v.begin(), v.end());
int ans = 0;
for(auto [ignore, p, w] : v){
p = lower_bound(c.begin(), c.end(), p) - c.begin() + 1;
int sz = f[w].query(p) + 1;
sz = max(sz, f[U-1].query(p) - k + 1);
ans = max(ans, sz);
f[w].upd(p, sz);
f[U-1].upd(p, sz);
}
cout << ans << '\n';
}