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