Cod sursa(job #3198246)

Utilizator Theo20067Cismaru Theodor-Alexe Theo20067 Data 28 ianuarie 2024 15:40:45
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 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]+=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+=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;
         });

        D[1]={V[1].y,V[1].z};
        update(V[1].y,V[1].z,1);
        L=1;
        for(i=2;i<=n;i++)
        {
            S=query(V[i].y,V[i].z);
            L=max(S+1,L);
            if(D[S+1].y!=0&&D[S+1].z!=0)
                update(D[S+1].y,D[S+1].z,-1);
            D[S+1]={V[i].y,V[i].z};
            update(D[S+1].y,D[S+1].z,1);
        }
        fout<<L<<"\n";
    }
    return 0;
}