Pagini recente » Cod sursa (job #3231090) | Cod sursa (job #2808215) | Cod sursa (job #569704) | Cod sursa (job #3168100) | Cod sursa (job #3149499)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define nmax 3502
using namespace std;
int n,t;
struct paralelipiped{
int x,y,z;
};
vector<paralelipiped> v;
short aib2d[nmax][nmax],ans;
ifstream f("cutii.in");
ofstream g("cutii.out");
bool cmp(paralelipiped A,paralelipiped B)
{
return(A.z<B.z);
}
void update(int x,int y,int val)
{
for(int i=x;i<=n;i+=(i&(-i)))
{
for(int j=y;j<=n;j+=(j&(-j)))
{
aib2d[i][j]=(val>aib2d[i][j]?val:aib2d[i][j]);
}
}
}
short query(int x,int y)
{
short ans=0;
for(int i=x;i>0;i-=(i&(-i)))
{
for(int j=y;j>0;j-=(j&(-j)))
{
if(aib2d[i][j]>ans)
ans=aib2d[i][j];
}
}
return ans;
}
void clean(int x,int y)
{
for(int i=x;i<=n;i+=(i&(-i)))
{
for(int j=y;j<=n;j+=(j&(-j)))
{
aib2d[i][j]=0;
}
}
}
int main()
{
f>>n>>t;
for(;t;--t)
{
for(int i=1;i<=n;i++)
{
int x,y,z;
f>>x>>y>>z;
v.push_back({x,y,z});
}
sort(v.begin(),v.end(),cmp);
for(auto a:v)
{
int dp=1+query(a.x,a.y);
if(dp>ans)
ans=dp;
update(a.x,a.y,dp);
}
g<<ans<<"\n";
ans=0;
for(auto a:v)
{
clean(a.x,a.y);
}
v.clear();
}
return 0;
}