Submission
Status:
(-SSS)(-SS)(-SSS)(-SSSSSS)(-SSSSSS)(-SSSSSSSSSS)(-SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS)
Subtask/Task Score:
{0/9}{0/5}{0/6}{0/11}{0/14}{0/25}{0/30}
Score: 0
User: hyyh
Problemset: ผลึกเวลา (Crystal)
Language: cpp
Time: 0.055 second
Submitted On: 2026-03-14 21:44:08
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <tuple>
#include <math.h>
#include <cstring>
#include <bitset>
#include <set>
#include <map>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define endl '\n'
#define f first
#define s second
#define all(x) begin(x),end(x)
int main(){
int u;cin >> u;
int k;cin >> k;
int n;cin >> n;
vector<vector<int>> vc(u+1);
for(int i{};i <= u;i++){
vc[i].emplace_back(0);
}
vector<piii> inp;
for(int i{};i < n;i++){
int a,b,c;cin >> a >> b >> c;
inp.emplace_back(c,b+1,a);
}
sort(all(inp));
for(auto [time,uni,power]:inp){
// for(int i{};i <= u;i++){
// for(auto k:vc[i]) cout << k << " ";
// cout << endl;
// }
//cout << "________" << endl;
auto it1 = lower_bound(all(vc[uni]),power);
auto it2 = lower_bound(all(vc[0]),power)-vc[0].begin()-k;
int ind = 0;
if(it1 == vc[uni].end()){
vc[uni].emplace_back(power);
ind = vc[uni].size()-1;
}
else{
*it1 = power;
ind = it1-vc[uni].begin();
}
while(int(it2) > int(vc[uni].size())){
//cout << it2 << " " << vc[uni].size() << " " << (it2 > vc[uni].size())<< endl;
vc[uni].emplace_back(power);
ind = vc[uni].size()-1;
}
if(ind >= vc[0].size()) vc[0].emplace_back(power);
else vc[0][ind] = min(vc[0][ind],power);
}
cout << vc[0].size();
}
/*
3 1 13
2 0 1
1 1 2
4 0 3
20 0 10
12 2 4
7 1 5
14 2 6
3 1 7
11 2 12
9 1 8
10 2 11
25 0 13
13 2 20
5
____
2 2 10
2 1 1
5 1 2
7 1 3
3 1 4
8 0 5
9 0 6
1 0 7
10 0 8
13 0 9
4 0 10
5
*/