Pagini recente » Cod sursa (job #554578) | Cod sursa (job #15387) | Cod sursa (job #3140820) | Cod sursa (job #616143) | Cod sursa (job #1730094)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
int n,t,i;
short aib[3502][3502];
struct punct
{
int a;
int b;
int c;
}v[1<<12];
struct cmp
{
bool operator () (const punct &a,const punct &b)
{
return a.a<b.a;
}
};
inline short query(int l,int c)
{
int i,j;
short rez=0;
for(i=l;i;i-=(i&(-i)))
for(j=c;j;j-=(j&(-j)))
rez=max(rez,aib[i][j]);
return rez;
}
inline void update(int l,int c,short cost)
{
int i,j;
for(i=l;i<=n;i+=(i&(-i)))
for(j=c;j<=n;j+=(j&(-j)))
aib[i][j]=max(cost,aib[i][j]);
}
inline void sterg(int l,int c)
{
int i,j;
for(i=l;i<=n;i+=(i&(-i)))
for(j=c;j<=n;j+=(j&(-j)))
aib[i][j]=0;
}
int main()
{
f>>n>>t;
while(t--)
{
short sol=0;
for(i=1;i<=n;++i)
f>>v[i].a>>v[i].b>>v[i].c;
sort(v+1,v+n+1,cmp());
for(i=1;i<=n;++i)
{
short po=query(v[i].b-1,v[i].c-1)+1;
sol=max(sol,po);
update(v[i].b,v[i].c,po);
}
for(i=1;i<=n;++i) sterg(v[i].b,v[i].c);
g<<sol<<'\n';
}
return 0;
}