Pagini recente » Cod sursa (job #731364) | Cod sursa (job #2017290) | Statistici Iacob Alexandru (iacobAlexandru) | Cod sursa (job #53119) | Cod sursa (job #2889845)
//Ilie Dumitru
#include<cstdio>
#include<vector>
typedef long long int ll;
const int NMAX=3505;
const ll MOD=1000000007;
FILE* f=fopen("cutii.in", "r"), *g=fopen("cutii.out", "w");
int AIB[NMAX][NMAX], N, x[NMAX], y[NMAX];
void reset(int i, int j)
{
int k;
for(;i<=N;i+=i&-i)
for(k=j;k<=N && AIB[i][k];k+=k&-k)
AIB[i][k]=0;
}
void change(int i, int j, int val)
{
int k;
for(;i<=N;i+=i&-i)
for(k=j;AIB[i][k]<val && k<=N;k+=k&-k)
AIB[i][k]=val;
}
int getMax(int i, int j)
{
int max=0, k;
for(;i;i^=i&-i)
for(k=j;k;k^=k&-k)
if(AIB[i][k]>max)
max=AIB[i][k];
return max;
}
void solve()
{
int i, x, y, z, ans=0;
for(i=0;i<N;++i)
{
fscanf(f, "%d%d%d", &x, &y, &z);
::x[--z]=x;
::y[z]=y;
}
for(i=0;i<N;++i)
{
x=getMax(::x[i], ::y[i])+1;
if(x>ans)
ans=x;
change(::x[i], ::y[i], x);
}
for(i=0;i<N;++i)
reset(::x[i], ::y[i]);
fprintf(g, "%d\n", ans);
}
int main()
{
int T;
fscanf(f, "%d%d", &N, &T);
while(T--)
solve();
fclose(f);
fclose(g);
return 0;
}