Pagini recente » Cod sursa (job #1066124) | Cod sursa (job #682980) | Cod sursa (job #1363815) | Cod sursa (job #714991) | Cod sursa (job #2049343)
#include <bits/stdc++.h>
#define MAX_N 3500
using namespace std;
FILE *f, *g;
int n;
int dp[MAX_N + 1];
struct elem
{
int x, y, z;
};
elem v[MAX_N + 1];
struct cmp
{
bool operator () (const elem &a, const elem &b) const
{
return a.x < b.x;
}
};
short aib[MAX_N + 1][MAX_N + 1];
void initAib(int n)
{
int i, j;
for(i = 0; i <= n; i ++)
{
for(j = 0; j <= n; j ++)
aib[i][j] = 0;
}
}
void add(int y, int z, int nr)
{
while(y <= n)
{
int cz = z;
while(z <= n)
{
aib[y][z] = max(aib[y][z], (short)nr);
z += z & (-z);
}
z = cz;
y += y & (-y);
}
}
int getMax(int y, int z)
{
int rez = 0;
while(y > 0)
{
int cz = z;
while(z > 0)
{
rez = max(rez, (int)aib[y][z]);
z -= z & (-z);
}
z = cz;
y -= y & (-y);
}
return rez;
}
void solve()
{
initAib(n);
sort(v + 1, v + n + 1, cmp());
int i;
int rez = 1;
dp[1] = 1;
add(v[1].y, v[1].z, 1);
for(i = 2; i <= n; i ++)
{
dp[i] = getMax(v[i].y, v[i].z) + 1;
add(v[i].y, v[i].z, dp[i]);
rez = max(rez, dp[i]);
}
fprintf(g, "%d\n", rez);
}
void ansQues()
{
initAib(MAX_N);
f = fopen("cutii.in", "r");
g = fopen("cutii.out", "w");
int t;
fscanf(f, "%d%d", &n, &t);
while(t > 0)
{
int i;
for(i = 1; i <= n; i ++)
fscanf(f, "%d%d%d", &v[i].x, &v[i].y, &v[i].z);
solve();
t --;
}
fclose(f);
fclose(g);
}
int main()
{
ansQues();
return 0;
}