Pagini recente » Cod sursa (job #2467058) | Cod sursa (job #2118095) | Cod sursa (job #1376178) | Cod sursa (job #1022050) | Cod sursa (job #2800763)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#define NMAX 3505
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
struct {
int x, y;
} cutii[NMAX];
short tests;
int n, fwt[NMAX][NMAX];
inline int queryFwt(int X, int Y) {
int ANS = 0;
for(int i = X; i > 0; i -= i & -i)
for(int j = Y; j > 0; j -= j & -j)
ANS = max(ANS, fwt[i][j]);
return ANS;
}
inline void updateFwt(int X, int Y, const int VAL) {
for(int i = X; i <= n; i += i & -i)
for(int j = Y; j <= n; j += j & -j)
fwt[i][j] = max(fwt[i][j], VAL);
}
inline void clearFwt(int X, int Y) {
for(int i = X; i <= n; i += i & -i)
for(int j = Y; j <= n; j += j & -j)
fwt[i][j] = 0;
}
void solve() {
for(int i = 1; i <= n; ++i) {
int x, y, z;
fin >> x >> y >> z;
cutii[z] = {x, y};
}
for(int i = 1; i <= n; ++i) {
const int crt = queryFwt(cutii[i].x, cutii[i].y) + 1;
updateFwt(cutii[i].x, cutii[i].y, crt);
}
fout << queryFwt(n, n) << "\n";
for(int i = 1; i <= n; ++i)
clearFwt(cutii[i].x, cutii[i].y);
}
int main()
{
fin >> n >> tests;
while(tests--) solve();
return 0;
}