Pagini recente » Cod sursa (job #650250) | Cod sursa (job #544275) | Cod sursa (job #1219901) | Istoria paginii runda/oni2019ziua2 | Cod sursa (job #976865)
Cod sursa(job #976865)
#include<fstream>
#include<algorithm>
#define cutie pair<pair<int,int>,int>
#define x first.first
#define y first.second
#define z second
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
int i,t,n,sol,d[3510],aib[3510][3510];
cutie a[3510];
inline bool cmp(cutie a,cutie b)
{
return a.z<b.z;
}
inline void update(int xx,int yy,int v)
{
for(int i=xx;i<=n;i+=(i)&(-i))
for(int j=yy;j<=n;j+=(j)&(-j))
aib[i][j]=max(aib[i][j],v);
}
inline int query(int xx,int yy)
{
int rez=0;
for(int i=xx;i;i-=(i)&(-i))
for(int j=yy;j;j-=(j)&(-j))
rez=max(rez,aib[i][j]);
return rez;
}
inline void gol(int xx,int yy)
{
for(int i=xx;i<=n;i+=(i)&(-i))
for(int j=yy;j<=n;j+=(j)&(-j))
aib[i][j]=0;
}
int main()
{
f>>n>>t;
for(;t;--t)
{
sol=0;
for(i=1;i<=n;++i)
f>>a[i].x>>a[i].y>>a[i].z;
sort(a+1,a+n+1,cmp);
for(i=1;i<=n;++i)
{
d[i]=query(a[i].x-1,a[i].y-1)+1;
update(a[i].x,a[i].y,d[i]);
sol=max(sol,d[i]);
}
g<<sol<<'\n';
for(i=1;i<=n;++i)
gol(a[i].x,a[i].y);
}
}