Cod sursa(job #3192106)

Utilizator velciu_ilincavelciu ilinca velciu_ilinca Data 11 ianuarie 2024 16:16:54
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <algorithm>

using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
const int tmax = 3501;
int aib[tmax][tmax],n;
struct cutie
{
    int a,b,c;
};
cutie v[tmax];
bool comp(cutie x, cutie y)
{
    return x.a < y.a;
}
int interog(int a,int b)
{
    int maxi = -1;
    for(int i = a; i > 0; i -= (i &(-i)))
        for(int j = b; j > 0; j -= (j & (-j)))
            maxi = max(aib[i][j],maxi);
    return maxi;
}
void actualiz(int a,int b, int val)
{
    for(int i = a; i <= n; i += (i & (-i)))
        for(int j = b; j <= n; j += (j & (-j)))
        {
            aib[i][j] = max(aib[i][j],val);

        }
}
void stergere(int a,int b)
{
    for(int i = a; i <= n; i += (i & (-i)))
        for(int j = b; j <= n; j += (j & (-j)))
        {
            aib[i][j] = 0;
        }
}
int main()
{
    int t;
    in>>n>>t;
    for(int i = 1; i <= t; i++)
    {
        int maxi = 0;

        for(int j = 1; j <= n; j++)
            in>>v[j].a>>v[j].b>>v[j].c;
        sort(v + 1, v + n + 1, comp);

        for(int j = 1; j <= n; j ++)
        {
            int nr = interog(v[j].b, v[j].c) + 1;
            actualiz(v[j].b, v[j].c, nr);
            maxi = max(maxi, nr);
        }
        out<<maxi<<'\n';
        for(int j = 1; j <= n; j++)
            stergere(v[j].b, v[j].c);
    }
    return 0;
}