Cod sursa(job #1089830)

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

using namespace std;

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

int n,t,val,X,Y;
int aib[3501][3501];
int x[3501],y[3501],z[3501],v[3501];
int q1[3501],q2[3501];

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);
    }
}

void reset (int i, int j)
{
    for (; i<= n; i += LSB(i))
        for (; j<= n; j += LSB(j))
    {
        aib[i][j] = 0;
    }
}

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;
        }

        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);
            q1[i] = X;
            q2[i] = Y;
        }

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

        for (int i=1; i<=n; ++i)
        {
            reset (q1[i],q2[i]);
        }
    }
}