Cod sursa(job #2333465)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 1 februarie 2019 09:57:43
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.74 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream cin("cutii.in");
ofstream cout("cutii.out");

const int N=3500+7;

int n,t;

struct kek
{
        int a;
        int b;
        int c;
};

bool cmp(kek a,kek b)
{
        return a.c<b.c;
}

kek v[N];

int fen[N][N];

void upd(int x,int y,int val)
{
        for(int i=x;i<=n;i+=i&(-i))
        {
                for(int j=y;j<=n;j+=j&(-j))
                {
                        fen[i][j]=max(fen[i][j],val);
                }
        }
}

int ask(int x,int y)
{
        int res=0;
        for(int i=x;i>=1;i-=i&(-i))
        {
                for(int j=y;j>=1;j-=j&(-j))
                {
                        res=max(res,fen[i][j]);
                }
        }
        return res;
}

void clr(int x,int y)
{
        for(int i=x;i<=n;i+=i&(-i))
        {
                for(int j=y;j<=n;j+=j&(-j))
                {
                        fen[i][j]=0;
                }
        }
}

int main()
{
        cin>>n>>t;
        while(t--)
        {
                for(int i=1;i<=n;i++)
                {
                        cin>>v[i].a>>v[i].b>>v[i].c;
                }
                sort(v+1,v+n+1,cmp);
                int res=0;
                for(int i=1;i<=n;i++)
                {
                        int cur=ask(v[i].a,v[i].b)+1;
                        if(cur>res)
                        {
                                res=cur;
                        }
                        upd(v[i].a,v[i].b,cur);
                }
                for(int i=1;i<=n;i++)
                {
                        clr(v[i].a,v[i].b);
                }
                cout<<res<<"\n";
        }
}
/**

**/