Cod sursa(job #3198249)

Utilizator Theo20067Cismaru Theodor-Alexe Theo20067 Data 28 ianuarie 2024 15:43:20
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("cutii.in");
ofstream fout("cutii.out");
int n,i,j,a[3503][3503],T,S,L,st,dr;
struct elem
{
    int x,y,z;
}V[3503];
struct elem1
{
    int y,z;
}D[3503];
void init()
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            a[i][j]=0;
}
void update(int x,int y,int val)
{
    for(int i=x;i<=n;i+=(i&(-i)))
        for(int j=y;j<=n;j+=(j&(-j)))
            a[i][j]=max(a[i][j],val);
}
int query(int x,int y)
{
    int S=0;
    for(int i=x;i;i-=(i&(-i)))
        for(int j=y;j;j-=(j&(-j)))
            S=max(S,a[i][j]);
    return S;
}
int main()
{
    fin>>n>>T;
    while(T--)
    {
        init();
        for(i=1;i<=n;i++)
            fin>>V[i].x>>V[i].y>>V[i].z;
        sort(V+1,V+n+1,[](elem a,elem b){
             if(a.x==b.x)
             {
                 if(a.y==b.y)
                    return a.z<b.z;
                 return a.y<b.y;
             }
             return a.x<b.x;
         });
         L=1;
         for(i=1;i<=n;i++)
         {
            S=query(V[i].y,V[i].z)+1;
            update(V[i].y,V[i].z,S);
            L=max(L,S);
         }
         fout<<L<<"\n";
    }
    return 0;
}