Cod sursa(job #2509085)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 13 decembrie 2019 19:28:13
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>
#define DIM 3510
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n,i,A[DIM][DIM],t,val,sol;
struct cutie{
    int x,y,z;
};
cutie v[DIM];
bool cmp(const cutie &a, const cutie &b) {
    return a.z<b.z;
}
void update (int pozi,int pozj,int x) {
    for (int i=pozi;i<=n;i+=(i&-i))
        for (int j=pozj;j<=n;j+=(j&-j)) {
            if (x==0)
                A[i][j]=0;
            else
                A[i][j]=max(A[i][j],x);
        }
}
int query(int pozi,int pozj) {
    int rez=0;
    for (int i=pozi;i;i-=(i&-i))
        for (int j=pozj;j;j-=(j&-j))
            rez=max(rez,A[i][j]);
    return rez;
}
int main() {
    fin>>n>>t;
    while (t--) {
        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++) {
            val=1+query(v[i].x-1,v[i].y-1); //query-ul returneaza cate cutii cu dimensiuni mai mici am avut inainte
            update(v[i].x,v[i].y,val);
            sol=max(sol,val);
        }
        fout<<sol<<"\n";
        for (i=1;i<=n;i++)
            update(v[i].x,v[i].y,0);
    }
    return 0;
}