Pagini recente » Cod sursa (job #620069) | Cod sursa (job #1481020) | Cod sursa (job #2581777) | Cod sursa (job #699839) | Cod sursa (job #2150825)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("cutii.in");
ofstream fout ("cutii.out");
#define lim 3510
int n,t,sol,lmax;
int aib[lim][lim];
struct cutie {int x,y,z;} ini[lim];
bool cmp (cutie A, cutie B)
{
return A.x<B.x;
}
int query (int i, int j)
{
int maxm=-1000000;
for (int l=i; l>0; l-=(l&(-l)))
for (int c=j; c>0; c-=(c&(-c)))
maxm = max (maxm, aib[l][c]);
return maxm;
}
void update (int i, int j, int val)
{
for (int l=i; l<=n; l+=(l&(-l)))
for (int c=j; c<=n; c+=(c&(-c)))
aib[l][c] = val;
}
int main()
{
fin>>n>>t;
while (t--)
{
for (int i=1; i<=n; i++) fin>>ini[i].x>>ini[i].y>>ini[i].z;
sort (ini+1, ini+n+1, cmp);
sol = -1000000000;
for (int i=1; i<=n; i++)
{
lmax = query (ini[i].y, ini[i].z) + 1;
update (ini[i].y, ini[i].z, lmax);
sol = max (sol, lmax);
}
fout<<sol<<'\n';
for (int i=1; i<=n; i++)
for (int j=ini[i].y; j<=n; j+=(j&(-j)))
for (int k=ini[i].z; k<=n; k+=(k&(-k)))
aib[j][k] = 0;
}
fout.close();
return 0;
}