Cod sursa(job #2047729)

Utilizator LeVladzCiuperceanu Vlad LeVladz Data 25 octombrie 2017 10:32:50
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <algorithm>
#define x first.first
#define y first.second
#define z second

using namespace std;

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

int n,i,j,k,nr,A[3501][3501],T,Y,Z,X;
pair<pair<int, int>, int> v[3501];

int query(int X, int Y)
{
    int maxim = 0;
    for (int i=X; i; i-=(i&-i))
        for (int j=Y; j; j-=(j&-j))
            maxim = max(maxim, A[i][j]);
    return maxim;
}

void update(int X, int Y)
{
    for (int i=X; i<=n; i+=(i&-i))
        for (int j=Y; j<=n; j+=(j&-j))
            A[i][j] = max(A[i][j], nr);
}

int main()
{
    fin >> n >> T;
    for (;T--;)
    {
        for (i=1; i<=n; i++)
            fin >> v[i].x >> v[i].y >> v[i].z;
        sort(v+1, v+n+1);
        for (i=1; i<=n; i++)
        {
            Y = v[i].y;
            Z = v[i].z;
            nr = query(Y-1, Z-1);
            nr++;
            update(Y, Z);
        }
        fout << query(n, n) << "\n";
        for (k=1; k<=n; k++)
            for (i=v[k].y; i<=n; i+=(i&-i))
                for (j=v[k].z; j<=n; j+=(j&-j))
                    A[i][j] = 0;
    }
    return 0;
}