Pagini recente » Cod sursa (job #2202441) | Cod sursa (job #2965936) | Cod sursa (job #2271754) | Istoria paginii runda/lmk_1/clasament | Cod sursa (job #1700954)
#include <iostream>
#include<fstream>
using namespace std;
short q[3505][3505],a[3505],b[3505],best[3505][3505],i,j,n,t,c,d,x,y,z,tip,maxim,cnt;
inline int lbit(int x)
{
return ((x^(x-1))&x);
}
void update(int x,int y,int val)
{
for(c=x;c<=n;c+=lbit(c))
for(d=y;d<=n;d+=lbit(d))
if(best[c][d]<val||q[c][d]!=cnt)
{best[c][d]=val;q[c][d]=cnt;}
}
int query(int x,int y)
{
int mx=0;
for(c=x;c>0;c-=lbit(c))
for(d=y;d>0;d-=lbit(d))
if(q[c][d]==cnt&&best[c][d]>mx)mx=best[c][d];
return mx;
}
int main()
{
ifstream f("cutii.in");
ofstream g("cutii.out");
f>>n>>t;
for(cnt=1;cnt<=t;cnt++)
{
maxim=0;
for(i=1;i<=n;i++)
{f>>x>>y>>z;a[x]=y;b[x]=z;}
for(i=1;i<=n;i++)
{
tip=query(a[i],b[i]);
best[a[i]][b[i]]=tip+1;
update(a[i],b[i],tip+1);
if(best[a[i]][b[i]]>maxim) maxim=best[a[i]][b[i]];
}
g<<maxim<<'\n';
}
return 0;
}