Cod sursa(job #3356792)

Utilizator nicoleta_iancuIancu Nicoleta nicoleta_iancu Data 4 iunie 2026 10:42:26
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<fstream>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
const int NMAX=3501;
int aib[NMAX][NMAX];
//aib[y][z]
//aib[y]=sp pe vector de frecventa al z-urilot tututor numerelor din intervalul(i,y) 
int n;
int  lsb(int &x){
    return x&(-x);
}
struct cutie{
    int x,y,z;
    cutie(int a,int b,int c):x(a),y(b),z(c){};
    cutie():x(0),y(0),z(0){};
};
bool cmp1(cutie a,cutie b){
    return a.x<b.x;
}
void updateAib(int &x,int &y,int &val){
    for(int i=x;i<=n;i+=lsb(i)){
        for(int j=y;j<=n;j+=lsb(j)){
            aib[i][j]=max(aib[i][j],val);
        }
    }
}
int queryAib(int &x,int &y){
    int maxi=0;
    for(int i=x;i>0;i-=lsb(i)){
        for(int j=y;j>0;j-=lsb(j)){
            maxi=max(maxi,aib[i][j]);
        }
    }
    return maxi;
}
void reset(int n){
    for(int i=0;i<=n;++i){
        for(int j=0;j<=n;++j){
            aib[i][j]=0;
        }
    }
}
int main(){
    int tests;
    fin>>n>>tests;
    vector<cutie>v(n);
    while (tests)
    {
        for(int i=0;i<n;++i){
            fin>>v[i].x>>v[i].y>>v[i].z;
        }
        sort(v.begin(),v.end(),cmp1);
        int rez=0;
        for (int i = 0; i < n;++i) {
            int query = queryAib(v[i].x,v[i].y);
            query++;//si pt cel curent
            rez=max(rez,query);
            updateAib(v[i].y,v[i].z,query);
        }
        fout<<rez<<"\n";
        reset(n);
        --tests;
    }
    
    return 0;
}