Cod sursa(job #3349751)

Utilizator Matei_AndronacheMatei Andronache Matei_Andronache Data 2 aprilie 2026 13:27:47
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <bits/stdc++.h>

#define N 3567
using namespace std;
ifstream in ("cutii.in");
ofstream out ("cutii.out");

struct aib{
    int a[N][N];

    void update(int px,int py,int val)
    {
        for (int x=px;x<N;x+=(x&-x))
        {
            for (int y=py;y<N;y+=(y&-y))
            {
                a[x][y]=max(a[x][y],val);
            }
        }
    }

    int query(int px,int py)
    {
        int mx=0;
        for (int x=px;x>0;x-=(x&-x))
        {
            for (int y=py;y>0;y-=(y&-y))
            {
                mx=max(mx,a[x][y]);
            }
        }
        return mx;
    }

    void reset(int px,int py)
    {
        for (int x=px;x<N;x+=(x&-x))
        {
            for (int y=py;y<N;y+=(y&-y))
            {
                a[x][y]=0;
            }
        }
    }
}a;

struct cutie{
int x,y,z;
}v[N];
bool cmp(cutie a,cutie b)
{
    if (a.z!=b.z)
        return a.z<b.z;
    if (a.x!=b.x)
        return a.x<b.x;
    return a.y<b.y;
}
int main()
{
    int n,t;
    in>>n>>t;
    for (int k=1;k<=t;k++)
    {
        for (int i=1;i<=n;i++)
        {
            in>>v[i].x>>v[i].y>>v[i].z;
        }
        sort(v+1,v+n+1,cmp);
        int mx=0;
        for (int i=1;i<=n;i++)
        {
            a.update(v[i].x,v[i].y,a.query(v[i].x,v[i].y)+1);
            mx=max(mx,a.query(v[i].x,v[i].y));
        }
        out<<mx<<'\n';
        for (int i=1;i<=n;i++)
        {
            a.reset(v[i].x,v[i].y);
        }
    }
    return 0;
}