Pagini recente » Cod sursa (job #2875015) | Cod sursa (job #53120) | Cod sursa (job #3279050) | Cod sursa (job #2583832) | Cod sursa (job #1659206)
#include<fstream>
#include<cstring>
using namespace std;
struct cutie
{
int x,y,z;
}a[3501];
int arbint[3501][3501],n,val,t;
char last[3501][3501];
void update(int idx1,int idx2)
{
for(int i=idx1;i<=n;i+=(i&-i))
for(int j=idx2;j<=n;j+=(j&-j))
if(last[i][j]==t)
arbint[i][j]=max(arbint[i][j],val);
else
{
arbint[i][j]=val;
last[i][j]=t;
}
}
int query(int idx1,int idx2)
{
int Val=0;
for(int i=idx1;i>0;i-=(i&-i))
for(int j=idx2;j>0;j-=(j&-j))
if(last[i][j]==t)
Val=max(arbint[i][j],Val);
return Val;
}
int main()
{
ifstream f("cutii.in");
ofstream g("cutii.out");
int rez=0;
f>>n>>t;
while(t)
{
t--;
rez=0;
for(int i=1;i<=n;i++)
{
int x,y,z;
f>>x>>y>>z;
a[z].x=x;
a[z].y=y;
a[z].z=z;
}
for(int i=1;i<=n;i++)
{
val=query(a[i].x-1,a[i].y-1)+1;
if(val>rez)
rez=val;
update(a[i].x,a[i].y);
}
g<<rez<<"\n";
}
return 0;
}