Pagini recente » Cod sursa (job #3160118) | Cod sursa (job #2098270) | Cod sursa (job #1099722) | Cod sursa (job #3229846) | Cod sursa (job #3280373)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
const int kMaxN=3505;
int fen_tree[kMaxN][kMaxN];
int nr_cutii,nr_teste,max_cuib=0;
void Update(int poz_x,int poz_y,int val)
{
while(poz_x<kMaxN)
{
int poz_y_copy=poz_y;
while(poz_y_copy<kMaxN)
{
fen_tree[poz_x][poz_y_copy]=max(fen_tree[poz_x][poz_y_copy],val);
poz_y_copy+=poz_y_copy&-poz_y_copy;
}
poz_x+=poz_x&-poz_x;
}
}
int Query(int poz_x,int poz_y)
{
int cuib=0;
while(poz_x>0)
{
int poz_y_copy=poz_y;
while(poz_y_copy>0)
{
cuib=max(cuib,fen_tree[poz_x][poz_y_copy]);
poz_y_copy-=poz_y_copy&-poz_y_copy;
}
poz_x-=poz_x&-poz_x;
}
return cuib;
}
struct Cutie
{
int x,y,z;
bool operator<(const Cutie b)
{
if(x==b.x)
{
if(y==b.y)
return z>b.z;
return y>b.y;
}
return x<b.x;
}
}cutii[kMaxN];
int main()
{
fin>>nr_cutii>>nr_teste;
for(int t=0;t<nr_teste;++t)
{
max_cuib=0;
memset(fen_tree,0,sizeof(fen_tree));
for(int i=1;i<=nr_cutii;++i)
{
int x,y,z;
fin>>x>>y>>z;
cutii[i]={x,y,z};
}
sort(cutii+1,cutii+nr_cutii+1);
for(int i=1;i<=nr_cutii;++i)
{
int cuib=Query(cutii[i].y,cutii[i].z)+1;
max_cuib=max(max_cuib,cuib);
Update(cutii[i].y,cutii[i].z,cuib);
}
fout<<max_cuib<<"\n";
}
return 0;
}