Cod sursa(job #2490151)

Utilizator vladth11Vlad Haivas vladth11 Data 9 noiembrie 2019 20:09:16
Problema Cutii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;
int aib[3501][3501],n;
struct ura{
    int x,y,z;
}v[3501];
bool cmp(ura a,ura b){
    return a.z < b.z;
}
void update(int x,int y,int val){
    int i,j;
    for(i = x;i <= n;i += i&(-i)){
        for(j = y;j <= n;j += j&(-j)){
            aib[i][j] = max(val,aib[i][j]);
        }
    }
}
int suma(int x,int y){
    int i,j,suma = 0;
    for(i = x;i >= 1;i -= i&(-i)){
        for(j = y;j >= 1;j -= j&(-j)){
            suma = max(suma,aib[i][j]);
        }
    }
    return suma;
}
int main()
{
    ifstream cin("cutii.in");
    ofstream cout("cutii.out");
    int t;
    cin >> n >> t;
    while(t--){
        int i;
        for(i = 0;i <= n;i++){
            for(int j = 0;j <= n;j++)
                aib[i][j] = 0;
        }
        for(i = 1;i <= n;i++){
            cin >> v[i].x >> v[i].y >> v[i].z;
        }
        sort(v + 1,v +n + 1,cmp);
        int maxim = 0;
        for(i = 1;i <= n;i++){
            int cv = suma(v[i].x,v[i].y) + 1;
            maxim = max(maxim,cv);
            update(v[i].x,v[i].y,cv);
        }
        cout << maxim << "\n";
    }
    return 0;
}