Cod sursa(job #3271625)

Utilizator PetruApostolApostol Mihnea Petru PetruApostol Data 26 ianuarie 2025 18:48:01
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <algorithm>
using namespace std;

ifstream cin("cutii.in");
ofstream cout("cutii.out");

int aib[3501][3501],n;
struct skibidi{
    int a,b,c;
} v[3501];

bool cmp(skibidi a,skibidi b){
    if(a.a!=b.a) return a.a<b.a;
    if(a.b!=b.b) return a.b<b.b;
    return a.c<b.c;
}

int query(int a,int b){
    int i,j,rasp;
    for(i=a;i;i-=(i&(-i))){
        for(j=b;j;j-=(j&(-j))){
            rasp=max(rasp,aib[i][j]);
        }
    }
    return rasp;
}

void update(int a,int b,int val){
    int i,j;
    for(i=a;i<=n;i+=(i&(-i))){
        for(j=b;j<=n;j+=(j&(-j))){
            aib[i][j]=max(aib[i][j],val);
        }
    }
}

void reset(int a,int b){
    int i,j;
    for(i=a;i<=n;i+=(i&(-i))){
        for(j=a;j<=n;j+=(j&(-j))){
            aib[i][j]=0;
        }
    }
}

void solve(){
    int i,j,max1=0,aux;
    for(i=1;i<=n;i++){
        cin>>v[i].a>>v[i].b>>v[i].c;
    }
    sort(v+1,v+n+1,cmp);///printf("%d ",n);
    for(i=1;i<=n;i++){
        aux=query(v[i].b,v[i].c);
        max1=max(max1,aux+1);
        update(v[i].b,v[i].c,aux+1);
    }
    cout<<max1<<"\n";
    for(i=1;i<=n;i++) reset(v[i].b,v[i].c);
}

int main()
{
    int m;
    cin>>n>>m;
    while(m--) solve();
    return 0;
}