Pagini recente » Cod sursa (job #2956962) | Cod sursa (job #2904344) | Cod sursa (job #2399288) | Cod sursa (job #198476) | Cod sursa (job #805448)
Cod sursa(job #805448)
#include<fstream>
#include<algorithm>
using namespace std;
struct cutie
{
int x,y,z;
};
struct st
{
int x,y;
};
cutie a[3501];
st v[3501][3501];
int i,k,t,n,mx,s,j;
bool cmp(cutie a,cutie b)
{
return a.z<b.z;
}
int query(int x,int y)
{
int i,j,s=0;
for (i=x;i>0;i=i & (i-1))
for (j=y;j>0;j=j & (j-1))
if (v[i][j].y==k)
s=max(s,v[i][j].x);
return s;
}
void update(int x,int y,int z)
{
int i,j;
for (i=x;i<=n;i=(i | (i-1))+1)
for (j=y;j<=n;j=(j | (j-1))+1)
{
if (v[i][j].y==k)
v[i][j].x=max(v[i][j].x,z);
else
{
v[i][j].x=z;
v[i][j].y=k;
}
}
}
int main()
{
ifstream f("cutii.in");
ofstream g("cutii.out");
f >> n >> t;
for (k=1;k<=t;k++)
{
mx=0;
for (i=1;i<=n;i++)
f >> a[i].x >> a[i].y >> a[i].z;
sort(a+1,a+n+1,cmp);
for (i=1;i<=n;i++)
{
s=query(a[i].x,a[i].y);
mx=max(s,mx);
update(a[i].x,a[i].y,s+1);
}
g << mx+1 << "\n";
}
return 0;
}