Cod sursa(job #1089827)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 21 ianuarie 2014 22:59:23
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <cstring>

using namespace std;

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

short n,t,val,X,Y;
short aib[3501][3501];
short x[3501],y[3501],z[3501],v[3501];

short max (short a, short b)
{
    if (a > b)
        return a;
    return b;
}

int LSB (int i)
{
    return i&(-i);
}

void query (int i, int j)
{
    for (; i > 0; i -= LSB(i))
        for (;j > 0; j -= LSB(j))
    {
        val = max (aib[i][j],val);
    }
}

void update (int i, int j)
{
    for (; i<= n; i += LSB(i))
        for (; j<= n; j += LSB(j))
    {
        aib[i][j] = max (aib[i][j],val);
    }
}

int main()
{
    fin>>n>>t;

    for (;t; --t)
    {
        for (int i=1; i<=n; ++i)
        {
            fin>>x[i]>>y[i]>>z[i];
            v[x[i]] = i;
        }

        memset (aib,0,sizeof(aib));

        for (int i=1; i<=n; ++i)
        {
            X = y[v[i]]-1; Y = z[v[i]]-1;
            val = 0;
            query (X,Y);
            val++;

            X++; Y++;
            update (X,Y);
        }

        val = 0;
        query (n,n);
        fout<<val<<"\n";
    }
}