Pagini recente » Cod sursa (job #2161620) | Cod sursa (job #2159162) | Cod sursa (job #1581975) | Cod sursa (job #328507) | Cod sursa (job #3192106)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
const int tmax = 3501;
int aib[tmax][tmax],n;
struct cutie
{
int a,b,c;
};
cutie v[tmax];
bool comp(cutie x, cutie y)
{
return x.a < y.a;
}
int interog(int a,int b)
{
int maxi = -1;
for(int i = a; i > 0; i -= (i &(-i)))
for(int j = b; j > 0; j -= (j & (-j)))
maxi = max(aib[i][j],maxi);
return maxi;
}
void actualiz(int a,int b, int val)
{
for(int i = a; i <= n; i += (i & (-i)))
for(int j = b; j <= n; j += (j & (-j)))
{
aib[i][j] = max(aib[i][j],val);
}
}
void stergere(int a,int b)
{
for(int i = a; i <= n; i += (i & (-i)))
for(int j = b; j <= n; j += (j & (-j)))
{
aib[i][j] = 0;
}
}
int main()
{
int t;
in>>n>>t;
for(int i = 1; i <= t; i++)
{
int maxi = 0;
for(int j = 1; j <= n; j++)
in>>v[j].a>>v[j].b>>v[j].c;
sort(v + 1, v + n + 1, comp);
for(int j = 1; j <= n; j ++)
{
int nr = interog(v[j].b, v[j].c) + 1;
actualiz(v[j].b, v[j].c, nr);
maxi = max(maxi, nr);
}
out<<maxi<<'\n';
for(int j = 1; j <= n; j++)
stergere(v[j].b, v[j].c);
}
return 0;
}