Cod sursa(job #1231105)

Utilizator mariusn01Marius Nicoli mariusn01 Data 19 septembrie 2014 15:48:32
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <algorithm>
#include <cstring>

#define DIM 3510

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

struct cutie {
    int x;
    int y;
    int z;
};

int A[DIM][DIM];
int n, i, x, sol, t;
cutie v[DIM];

int cmp(const cutie &a, const cutie &b) {
    return a.z<b.z;
}

int query(int x, int y) {
    int r = 0;
    for (;x;x-=(x&-x))
        for (;y;y-=(y&-y))
            r = max(r, A[x][y]);
    return r;
}

int update(int x, int y, int z) {
    for (;x<=n;x+=(x&-x))
        for (;y<=n;y+=(y&-y))
            A[x][y] = max(A[x][y], z);
}

int main() {
    fin>>n>>t;
    for (;t--;) {
        memset(A, 0, sizeof(A));
        sol = 0;
        for (i=1;i<=n;i++)
            fin>>v[i].x>>v[i].y>>v[i].z;

        sort(v+1, v+n+1, cmp);

        for (i=1;i<=n;i++){
            x = 1 + query(v[i].x-1, v[i].y-1);
            update(v[i].x, v[i].y, x);
            sol = max(sol, x);
        }

        fout<<sol<<"\n";
    }

    return 0;
}