Pagini recente » Cod sursa (job #2370666) | Cod sursa (job #2960773) | Cod sursa (job #896825) | Cod sursa (job #749462) | Cod sursa (job #2328603)
#include <bits/stdc++.h>
#define lim 3502
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
short t,n;
short aib[lim][lim],verif[lim][lim];
short x, y, z;
pair<short,short> c[lim];
short cutie(short actualX,short actualY)
{
short cut=0;
for(short i=actualX; i>0; i-=(i)&(-i))
for(short j=actualY; j>0; j-=(j)&(-j))
{
if(verif[i][j]!=t)aib[i][j]=0;
cut=max(cut,aib[i][j]);
verif[i][j]=t;
}
return cut;
}
void update(short actualX,short actualY)
{
for(short i=actualX; i<=n; i+=(i)&(-i))
for(short j=actualY; j<=n;j+=(j)&(-j))
{
if(verif[i][j]!=t)
aib[i][j]=0;
aib[i][j]=max(aib[i][j],aib[actualX][actualY]);
verif[i][j]=t;
}
}
int main()
{
fin>>n>>t;
while(t)
{
for(short i=1; i<=n; i++)
{
fin>>x>>y>>z;
c[z].first=x;
c[z].second=y;
}
short rez=0;
for(short i=1; i<=n; i++)
{
short actualX,actualY;
actualX=c[i].first;
actualY=c[i].second;
aib[actualX][actualY]=cutie(actualX-1,actualY-1)+1;
verif[actualX][actualY]=t;
update(actualX,actualY);
rez=max(rez,aib[actualX][actualY]);
}
fout<<rez<<'\n';
t--;
}
return 0;
}