Pagini recente » Cod sursa (job #1345184) | Cod sursa (job #1038809) | Cod sursa (job #1254208) | Cod sursa (job #325596) | Cod sursa (job #2889851)
//Ilie Dumitru
#include<cstdio>
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], iModif[NMAX*144], jModif[NMAX*144], modifCnt;
void reset()
{
int i;
for(i=0;i<modifCnt;++i)
AIB[iModif[i]][jModif[i]]=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;
iModif[modifCnt]=i;
jModif[modifCnt++]=k;
}
}
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);
}
reset();
fprintf(g, "%d\n", ans);
}
int main()
{
int T;
fscanf(f, "%d%d", &N, &T);
while(T--)
solve();
fclose(f);
fclose(g);
return 0;
}