Cod sursa(job #3030323)

Utilizator Zed1YasuoAlex Birsan Zed1Yasuo Data 17 martie 2023 16:52:57
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
int n,m,test;
const int N=3505;
struct pct
{
    int x,y,z;
}a[N];
int aib[N][N];
bool cmp(pct X,pct Y)
{
    if(X.x==Y.x)
    {
        if(X.y==Y.y)
            return X.z>Y.z;
        return X.y>Y.y;
    }
    return X.x<Y.x;
}
int query_aib(int x,int y)
{
    int rez=0;
    for(int i=x;i;i-=(i&-i))
        for(int j=y;j;j-=(j&-j))
            rez=max(rez,aib[i][j]);
    return rez;
}
void update_aib(int x,int y,int val)
{
    for(int i=x;i<N;i+=(i&-i))
        for(int j=y;j<N;j+=(j&-j))
            aib[i][j]=max(aib[i][j],val);
}
void erase_aib(int x,int y)
{
    for(int i=x;i<N;i+=(i&-i))
        for(int j=y;j<N;j+=(j&-j))
            aib[i][j]=0;
}

int main()
{
    f>>n>>test;
    while(test--)
    {
        for(int i=1;i<=n;i++)
        {
            f>>a[i].x>>a[i].y>>a[i].z;
        }
        sort(a+1,a+n+1,cmp);
        int sol=0;
        for(int i=1;i<=n;i++)
        {
            /// dimensiuni:  x,y,z
            int val= query_aib(a[i].y-1,a[i].z-1)+1;
            update_aib(a[i].y,a[i].z,val);
            sol=max(sol,val);
        }
        g<<sol<<'\n';
        for(int i=1;i<=n;i++)
            erase_aib(a[i].x,a[i].y);
    }
    return 0;
}