Pagini recente » Cod sursa (job #3000775) | Cod sursa (job #2408806) | Cod sursa (job #1626965) | Cod sursa (job #96478) | Cod sursa (job #1957815)
#include <fstream>
#include <algorithm>
#define Max 3510
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
struct cutie
{
int x, y, z;
bool operator <(const cutie &aux) const
{
return x<aux.x;
}
}v[Max];
int aib2d[Max][Max],d[Max],n;
void aib2dUpdate(int x,int y,int s)
{
for(int i = x;i <= n;i+= i & (-i))
for(int j = y;j <= n;j+= j & (-j))
aib2d[i][j] = max(aib2d[i][j], s);
}
int aib2dQuery(int x,int y)
{
int s = 0;
for(int i = x;i >= 1;i-= i & (-i))
for(int j = y;j >= 1;j-= j & (-j))
s = max(s,aib2d[i][j]);
return s;
}
void aib2dClear(int x,int y)
{
for(int i = x;i <=n ;i+= i & (-i))
for(int j = y;j <= n;j+= j & (-j))
aib2d[i][j] = 0;
}
int main()
{
int t;
in >> n >> t;
for(;t;t--)
{
int cevap = 0;
for(int i = 1;i <= n;i++)
in >> v[i].x >> v[i].y >> v[i].z;
sort(v + 1,v + 1 + n);
for(int i = 1;i <= n;i++)
{
int s = aib2dQuery(v[i].y-1,v[i].z-1);
d[i]=s + 1;
aib2dUpdate(v[i].y,v[i].z,d[i]);
}
for(int i = 1;i <= n;i++)
cevap = max(cevap,d[i]);
out << cevap << "\n";
for(int i = 1;i <= n;i++)
aib2dClear(v[i].y,v[i].z);
}
return 0;
}