Cod sursa(job #2913427)

Utilizator francescom_481francesco martinut francescom_481 Data 14 iulie 2022 13:30:43
Problema Cutii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("cutii.in");
ofstream fout("cutii.out");
#define cin fin
#define cout fout

#define N 3505

int n, t, mx, aib[N][N];
struct pct
{
    int x, y, z;
}v[N];

bool cmp(pct x, pct y)
{
    return (x.x < y.x  ||  (x.x == y.x  &&  x.y < y.y));
}
int query(int y, int z)
{
    int ans = 0;
    for(int i = y ; i ; i -= i&(-i))
    {
        for(int j = z ; j ; j -= j&(-j))
        {
            ans = max(ans,aib[i][j]);
        }
    }
    return ans;
}
void update(int y, int z, int val)
{
    for(int i = y ; i <= n; i += i&(-i))
    {
        for(int j = z  ; j <= n ; j += j&(-j))
        {
            aib[i][j] = max(aib[i][j],val);
        }
    }
}

int main() {
    cin >> n >> t;
    for( ; t ; t--)
    {
        mx = 0;
        for(int i = 1 ; i <= n ; i++)
        {
            cin >> v[i].x >> v[i].y >> v[i].z;
        }
        sort(v+1,v+n+1,cmp);
        for(int i = 1 ; i <= n ; i++)
        {
            int rez = query(v[i].y,v[i].z);
            mx = max(mx,rez+1);
            update(v[i].y,v[i].z,rez+1);
        }
        for(int i = 1 ; i <= n ; i++)
        {
            for(int j = 1 ; j <= n ; j++)aib[i][j] = 0;
        }
        cout << mx << "\n";
    }
    return 0;
}