Pagini recente » Istoria paginii runda/oni2011_ziua2 | Cod sursa (job #198011) | Cod sursa (job #2272462) | Cod sursa (job #215686) | Cod sursa (job #2705415)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
struct wow
{
int x,y,z;
}v[3505];
int n,aib[3501][3501],din[3505];
int ub (int x)
{
return x&(-x);
}
void update (int x,int y,int val)
{
int i,j;
for (i=x;i<=n;i+=ub(i))
{
for (j=y;j<=n;j+=ub(j))
{
aib[i][j]=max(aib[i][j],val);
}
}
}
int query (int x,int y)
{
int i,j,maxim=0;
for (i=x;i>0;i-=ub(i))
{
for (j=y;j>0;j-=ub(j))
{
maxim=max(maxim,aib[i][j]);
}
}
return maxim;
}
void update2(int x,int y,int val)
{
int i,j;
for (i=x;i<=n;i+=ub(i))
{
for (j=y;j<=n;j+=ub(j))
{
aib[i][j]=val;
}
}
}
bool compare (wow a,wow b)
{
return a.x<b.x||(a.x==b.x&&a.y<b.y)||(a.x==b.x&&a.y==b.y&&a.z<b.z);
}
int t,i,maxim1=0;
int main()
{
f>>n>>t;
for (;t--;)
{
for (i=1;i<=n;i++)
{
f>>v[i].x>>v[i].y>>v[i].z;
}
maxim1=0;
sort (v+1,v+n+1,compare);
for (i=1;i<=n;i++)
{
if (v[i].y==v[i-1].y&&v[i].z==v[i-1].z)
{
din[i]=din[i-1];
continue;
}
din[i]=query(v[i].y,v[i].z)+1;
update(v[i].y,v[i].z,din[i]);
if (din[i]>maxim1)
{
maxim1=din[i];
}
}
for (i=1;i<=n;i++)
{
update2(v[i].y,v[i].z,0);
}
g<<maxim1<<'\n';
}
return 0;
}