Pagini recente » Cod sursa (job #850128) | Cod sursa (job #440940) | Cod sursa (job #519081) | Cod sursa (job #1292410) | Cod sursa (job #2046511)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
struct cutie
{
int x;
int y;
int z;
} c[3503];
bool cmp(cutie a, cutie b)
{
if(a.z==b.z)
if(a.y==b.y)
return a.x<b.x;
else return a.y<b.y;
return a.z<b.z;
}
int n, teste, i, aib[3503][3503], sol;
int query(int x, int y)
{
int r=0;
for(int i=x;i;i-=(i & -i))
for(int j=y;j;j-=(j & -j))
r=max(aib[i][j], r);
return r;
}
void update(int x, int y, int r)
{
for(int i=x;i<=n;i+=(i & -i))
for(int j=y;j<=n;j+=(j & -j))
aib[i][j]=max(aib[i][j], r);
}
int main()
{
f>>n>>teste;
while(teste!=0)
{
for(i=1;i<=n;i++)
f>>c[i].x>>c[i].y>>c[i].z;
sort(c+1,c+n+1, cmp);
for(i=1;i<=n;i++)
{
sol=query(c[i].x-1, c[i].y-1)+1;
update(c[i].x, c[i].y, sol);
}
g<<query(n, n)<<"\n"; //mers, bogdan, pt sfat
for(int k=1;k<=n;k++)
for(i=c[k].x;i<=n;i+=(i & -i))
for(int j=c[k].y;j<=n;j+=(j & -j))
aib[i][j]=0;
teste--;
}
return 0;
}