Pagini recente » Borderou de evaluare (job #2645496) | Cod sursa (job #1477708) | Cod sursa (job #188477) | Borderou de evaluare (job #2280241) | Cod sursa (job #949321)
Cod sursa(job #949321)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
struct cutie
{
int x,y,z;
} a[3600];
int val[3600][3600],n;
ifstream in("cutii.in");
ofstream out("cutii.out");
inline int maxim(int a, int b)
{
return a>b ? a:b;
}
bool cmp(cutie a, cutie b)
{
if(a.x<b.x)
return true;
if(a.x>b.x)
return false;
if(a.y>b.y)
return true;
if(a.y<b.y)
return false;
if(a.z>b.z)
return true;
return false;
}
int querry(int x, int y)
{
int m=-1,y1;
while(x)
{
y1=y;
while(y1)
{
m=maxim(val[x][y-1],m);
y1-=(y1 & -y1);
}
x-=(x & -x);
}
return m;
}
void update(int x , int y)
{
int y1,k=querry(x-1,y-1);
while(x<=n)
{
y1=y;
while(y1<=n)
{
val[x][y1]=maxim(val[x][y-1],k+1);
y1+=(y1 & -y1);
}
x+=(x & -x);
}
}
void solve()
{
int i;
for(i=1;i<=n;++i)
{
in>>a[i].x>>a[i].y>>a[i].z;
}
sort(a+1,a+n+1,cmp);
for(i=1;i<=n;++i)
{
update(a[i].y,a[i].z);
}
out<<querry(n,n)<<"\n";
}
int main()
{
int i,t;
in>>n>>t;
for(i=1;i<=t;++i)
solve();
return 0;
}