Cod sursa(job #3316440)

Utilizator cris71Vlad Bogdan Cristian cris71 Data 18 octombrie 2025 19:29:22
Problema Cutii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("cutii.in");
ofstream fout ("cutii.out");
int const lmax=35e2+7;
int n,t;
int aib[lmax][lmax];
int dp[lmax];
struct elem{
int x,y,z;
}v[lmax];
bool cmp(elem a, elem b)
{
    return a.x<b.x;
}
void update(int posx, int posy, int val)
{
    for(int i=posx;i<=n;i+=(i&-i))
    {
        for(int j=posy;j<=n;j+=(j&-j))
        {
            aib[i][j]=max(aib[i][j],val);
        }
    }
}
int query(int posx, int posy)
{
    int s=0;
    for(int i=posx;i>0;i-=(i&-i))
    {
        for(int j=posy;j>0;j-=(j&-j))
        {
            s=max(s,aib[i][j]);
        }
    }
    return s;
}
void init()
{
    for(int i=1;i<=n;i++)
    {
        v[i].x=v[i].y=v[i].z=0;
        dp[i]=0;
        for(int j=1;j<=n;j++)
        {
            aib[i][j]=0;
        }
    }
}
int main()
{
    fin>>n>>t;
    for(int hams=0;hams<t;hams++)
    {
        init();
        for(int ter=1;ter<=n;ter++)
        {
            fin>>v[ter].x>>v[ter].y>>v[ter].z;
        }
        sort(v+1,v+n+1,cmp);
        for(int i=1;i<=n;i++)
        {
            dp[i]=query(v[i].y-1,v[i].z-1)+1;///adaug cutia in celelalte
            update(v[i].y,v[i].z,dp[i]);
        }
        int s=0;
        for(int i=1;i<=n;i++)
        {
            s=max(s,dp[i]);
        }
        fout<<s<<'\n';
    }

    fin.close();
    fout.close();
    return 0;
}