Pagini recente » Cod sursa (job #2981297) | Cod sursa (job #2539038) | Cod sursa (job #3218104) | Cod sursa (job #523265) | Cod sursa (job #3267604)
#include <algorithm>
#include <fstream>
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
struct ceva{
int h, l, c;
}a[3505];
int n, q, dp[3505], aib[3505][3505];
int ub(int x){
return (x&(-x));
}
void add(int l, int c, int val)
{
for(int i = l; i <= n; i += ub(i))
for(int j = c; j <= n ; j += ub(j))
aib[i][j] = max(aib[i][j], val);
}
int query(int l, int c)
{
int maxi = 0;
for(int i = l; i >= 1; i -= ub(i))
for(int j = c; j >= 1; j -= ub(j))
maxi = max(maxi, aib[i][j]);
return maxi;
}
bool cmp(ceva x, ceva y){
return x.h < y.h;
}
int main()
{
f >> n >> q;
for(; q >= 1; q --)
{
for(int i = 1; i <= n; i ++)
f >> a[i].h >> a[i].l >> a[i].c;
sort(a + 1, a + n + 1, cmp);
for(int i = 1; i <= n; i ++)
{
dp[i] = query(a[i].l - 1, a[i].c - 1) + 1;
add(a[i].l, a[i].c, dp[i]);
}
int maxi = 0;
for(int i = 1; i <= n; i ++)
maxi = max(maxi, dp[i]), dp[i] = 0;
g << maxi << '\n';
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
aib[i][j] = 0;
}
return 0;
}