Pagini recente » Cod sursa (job #1144464) | Cod sursa (job #1032728) | Cod sursa (job #2963872) | Cod sursa (job #2982860) | Cod sursa (job #2953677)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream cin("cutii.in");
ofstream cout("cutii.out");
const int N = 3509;
struct cuti
{
int x,y,z;
bool operator < (cuti b)
{
return (x<b.x&&y<b.y&&z<b.z);
}
bool operator > (cuti b)
{
return (x>b.x&&y>b.y&&z>b.z);
}
bool operator == (cuti b)
{
return (x<b.x&&y<b.y&&z<b.z)&&(x>b.x&&y>b.y&&z>b.z);
}
bool operator <= (cuti b)
{
return (x<b.x&&y<b.y&&z<b.z) || ((x<b.x&&y<b.y&&z<b.z)&&(x>b.x&&y>b.y&&z>b.z));
}
bool operator >= (cuti b)
{
return (x>b.x&&y>b.y&&z>b.z)||((x<b.x&&y<b.y&&z<b.z)&&(x>b.x&&y>b.y&&z>b.z));
}
};
int n,t;
vector<int> aib,L,p;
vector<cuti> a,b;
int Query(int x)
{
int maxi = 0;
for(int i = x; i; i -= i&-i)
maxi = max(aib[i],maxi);
return maxi;
}
void Update(int poz,int val)
{
for(int i = poz; i<= n ; i+=i&-i)
aib[i] = max(aib[i],val);
}
int main()
{
cin>>n>>t;
while(t--)
{
int ans = 1;
aib = L = p = vector<int>(n+4);
a = b = vector<cuti> (n);
for(int i=0;i<n;++i)
cin>>a[i].x>>a[i].y>>a[i].z;
b = a;
sort(b.begin(),b.end());
for(int i=0;i<n;++i)
p[i] = lower_bound(b.begin(),b.end(),a[i]) - b.begin() +1;
for(int i=0;i<n;++i)
{
L[i] = Query(p[i]-1) +1;
ans = max(ans,L[i]);
Update(p[i],L[i]);
}
cout<<ans<<'\n';
}
return 0;
}