Pagini recente » Cod sursa (job #2726671) | Cod sursa (job #1263637) | Cod sursa (job #2399050) | Cod sursa (job #2534811) | Cod sursa (job #1073425)
#include <fstream>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
const int N=3501;
int r[N][N],n,T,v1[N],v2[N],p,q;
int query(int i, int j)
{
int dmax=0;
for(p=i;p>0;p-=p&-p)
for(q=j;q>0;q-=q&-q)
if(r[p][q]>dmax) dmax=r[p][q];
return dmax;
}
void update(int i, int j, int val)
{
for(p=i;p<=n;p+=p&-p)
for(q=j;q<=n;q+=q&-q)
if(r[p][q]<val) r[p][q]=val;
}
void Reset(int i, int j)
{
for(p=i;p<=n;p+=p&-p)
for(q=j;q<=n;q+=q&-q)
r[i][j]=0;
}
int main()
{
int k,i,x,y,z,maxim,rez;
in>>n>>T;
for(k=1;k<=T;k++)
{
for(i=1;i<=n;i++)
{
in>>x>>y>>z;
v1[x]=y;
v2[x]=z;
}
maxim=-1;
for(i=1;i<=n;i++)
{
rez=query(v1[i],v2[i])+1;
update(v1[i],v2[i],rez);
if(maxim<rez) maxim=rez;
}
out<<maxim<<"\n";
for(i=1;i<=n;i++)
Reset(v1[i],v2[i]);
}
return 0;
}