Cod sursa(job #2438036)

Utilizator Alex_BubBuburuzan Alexandru Alex_Bub Data 11 iulie 2019 02:04:11
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int NMax = 3500;

int N, T, AIT[NMax + 5][NMax + 5];
struct str{int x, y;} V[NMax + 5];

int Update(int a, int b, int val)
{
    for(int i = a; i <= N; i += i & (-i))
        for(int j = b; j <= N; j += j & (-j))
        {
            if(i == a && j == b)
                AIT[i][j] = val;
            else
                AIT[i][j] = max(AIT[i][j], val);
        }
}

int Querry(int a, int b)
{
    int Sol = 0;

    for(int i = a; i > 0; i -= i & (-i))
        for(int j = b; j > 0; j -= j & (-j))
            Sol = max(Sol, AIT[i][j]);

    return Sol;
}

int main()
{
    fin >> N >> T;

    while(T--)
    {
        for(int i = 1, a; i <= N; i++)
        {
            fin >> a;
            fin >> V[a].x >> V[a].y;
        }

        for(int i = 1; i <= N; i++)
        {
            int val = Querry(V[i].x - 1, V[i].y - 1);
            Update(V[i].x, V[i].y, val + 1);
        }
        fout << Querry(N, N) << '\n';

        for(int i = 1; i <= N; i++)
            Update(V[i].x, V[i].y, 0);
    }
    fin.close();
    fout.close();

    return 0;
}