Cod sursa(job #2376804)

Utilizator Mada2003Madalina Scarlat Mada2003 Data 8 martie 2019 17:48:06
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#include<algorithm>

using namespace std;

ifstream fin("cutii.in");
ofstream fout("cutii.out");

const int NMax=3505;
int N,T,AIB[NMax][NMax];
struct Cutii
{
    int X,Y,Z;
} C[NMax];

bool Comp(Cutii A,Cutii B)
{
    return A.X<B.X;
}

int Next(int A)
{
    return A&(-A);
}

int Query(int A,int B)
{
    int Ans=0;
    for(int i=A; i>=1; i=i-Next(i))
        for(int j=B; j>=1; j=j-Next(j))
            Ans=max(Ans,AIB[i][j]);
    return Ans;
}

void Update(int A,int B,int Val)
{
    for(int i=A; i<=N; i=i+Next(i))
        for(int j=B; j<=N; j=j+Next(j))
            AIB[i][j]=max(AIB[i][j],Val);
}

void Begin(int A,int B)
{
    for(int i=A; i<=N; i=i+Next(i))
        for(int j=B; j<=N; j=j+Next(j))
            AIB[i][j]=0;
}

int main()
{
    fin>>N>>T;
    for(int p=1; p<=T; p++)
    {
        for(int i=1; i<=N; i++)
            fin>>C[i].X>>C[i].Y>>C[i].Z;
        sort(C+1,C+1+N,Comp);
        for(int i=1; i<=N; i++)
        {
            int Val=1+Query(C[i].Y-1,C[i].Z-1);
            Update(C[i].Y,C[i].Z,Val);
        }
        fout<<Query(N,N)<<'\n';
        for(int i=1; i<=N; i++)
            Begin(C[i].Y,C[i].Z);
    }
    return 0;
}