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: KantaponZ
Problemset: ผลึกเวลา (Crystal)
Language: cpp
Time: 0.298 second
Submitted On: 2025-06-27 00:04:13
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxU = 1005, maxN = 100005;
int U, k, N;
tuple<int,int,int> pos[maxN]; // t, w, p
set<int> srt;
unordered_map<int,int> x;
struct Fenwick {
int a[maxN];
int query(int i) {
int res = 0;
while (i > 0) {
res = max(res, a[i]);
i -= (i & -i);
}
return res;
}
void update(int i, int val) {
while (i < maxN) {
a[i] = max(a[i], val);
i += (i & -i);
}
}
} fenw[maxU];
int main() {
ios_base::sync_with_stdio(0), cin.tie(0);
cin >> U >> k >> N;
for (int i = 0; i < N; i++) {
int p, w, t;
cin >> p >> w >> t;
pos[i] = {t, w, p};
srt.insert(p);
}
vector<int> temp(srt.begin(), srt.end());
for (int i = 0; i < temp.size(); i++) {
x[temp[i]] = i + 1;
}
sort(pos, pos + N);
int ans = 0;
for (int i = 0; i < N; i++) {
auto [t, w, pp] = pos[i];
int p = x[pp];
int x1 = fenw[w].query(p - 1) + 1;
int x2 = fenw[1001].query(p - 1) + 1 - k;
int x = max(x1, x2);
fenw[w].update(p, x);
fenw[1001].update(p, x);
ans = max(ans, x);
}
cout << ans;
}