Pagini recente » Cod sursa (job #2744713) | Cod sursa (job #2815845) | Cod sursa (job #1367553) | Cod sursa (job #1291868) | Cod sursa (job #2470583)
//#pragma GCC optimize ("O3")
//#pragma GCC target ("sse4")
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
#define lsb(x) (x&(-x))
static const int NMAX = 3505;
int aib[NMAX][NMAX];
int dp[NMAX];
int n;
struct sizes
{
int x, y,z;
};
sizes box[NMAX];
inline bool cmp(const sizes &a, const sizes &b)
{
return a.x < b.x;
}
int query(int y, int z)
{
int mx = 0;
for(int i = y; i >= 1; i-=lsb(i))
{
for(int j = z; j >= 1; j-=lsb(j))
{
mx = max(mx,aib[i][j]);
}
}
return mx;
}
void update(int y,int z, int value)
{
for(int i =y; i <=n; i+=lsb(i))
{
for(int j = z; j <= n; j+=lsb(j))
{
aib[i][j] = max(aib[i][j], value);
}
}
}
void setAIB()
{
int l, i, j;
for(l = 1; l <=n; ++l)
{
for(i = box[l].y ; i <= n; i+=lsb(i))
{
for(j = box[l].z ; j <= n; j+=lsb(j))
aib[i][j] = 0;
}
}
}
int main()
{
int t;
fin>> n >> t;
while(t--)
{
for(int i =1 ; i<= n; ++i)
{
fin >> box[i].x >> box[i].y >> box[i].z;
}
sort(box+1, box+n+1,cmp);
setAIB();
for(int i = 1; i<=n; ++i)
{
dp[i] = query(box[i].y-1, box[i].z-1) + 1;
update(box[i].y, box[i].z, dp[i]);
}
int sol = 0;
for(int i = 1; i<=n; ++i)
{
sol = max(sol,dp[i]);
}
fout << sol << '\n';
}
return 0;
}