Pagini recente » Cod sursa (job #359293) | Cod sursa (job #2135197) | Cod sursa (job #1225189) | Cod sursa (job #1233913) | Cod sursa (job #1071185)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <memory.h>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
const int Nmax = 3510;
int T, N, AIB[Nmax][Nmax], sol;
struct cutie{
int x, y, z;
}V[Nmax];
bool cmp(const cutie &a, const cutie &b) {return a.z < b.z;}
void Update(int x, int y, int val)
{
for(int i = x; i <= N; i += i & (-i))
for(int j = y; j <= N; j += j & (-j))
if(val > AIB[i][j]) AIB[i][j] = val;
}
int Query(int x, int y)
{
int max = 0;
for(int i = x; i ; i -= i & (-i))
for(int j = y; j ; j -= j & (-j))
if(max < AIB[i][j]) max = AIB[i][j];
return max;
}
void Reset()
{
memset(AIB, 0, sizeof AIB);
memset(V, 0, sizeof V);
sol = 0;
}
int main()
{
fin>>N>>T;
while(T--)
{
for(int i=1; i <= N; i++)
fin>>V[i].x>>V[i].y>>V[i].z;
sort(V + 1, V + N + 1, cmp);
for(int i=1; i <= N; i++)
{
int best = Query(V[i].x, V[i].y) + 1;
Update(V[i].x, V[i].y, best);
if(sol < best) sol = best;
}
fout<<sol<<'\n';
Reset();
}
return 0;
}