Cod sursa(job #3321601)

Utilizator GliggyGligor Andrei Gliggy Data 10 noiembrie 2025 13:35:52
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cutii.in");  // strudel
ofstream fout("cutii.out"); //cutii
int n,i,j,q,t,x,y,z,sum1;
int a[3600][3600];
struct aaa{
    int x,y,z;
};
aaa v[3600];
auto cmp = [](const aaa& a, const aaa& b){
    return a.x<b.x;
};
void update(int x, int y, int v){
    for(int i=x;i<=n;i+=i&-i)
        for(int j=y;j<=n;j+=j&-j)
            a[i][j]=max(a[i][j],v);
}
int sum(int x, int y){
    int sum=0;
    for(int i=x;i>0;i-=i&-i)
        for(int j=y;j>0;j-=j&-j)
            sum=max(sum,a[i][j]);
    return sum;
}
int main()
{
    fin>>n>>t;
    for(q=1;q<=t;q++){
        for(i=1;i<=n;i++) fin>>x>>y>>z,v[i]={(int)x,(int)y,(int)z};
        sort(v+1,v+n+1,cmp);
        for(i=1;i<=n;){
            vector<aaa> s;
            vector<int> sm;
            s.push_back(v[i++]);
            while(i<=n && v[i].x==v[i-1].x) s.push_back(v[i]),i++;
            for(auto it:s){
                int val=sum(it.y-1, it.z-1)+1;
                sum1=max(sum1,val);
                sm.push_back(val);
            }
            for(auto it=s.begin();it!=s.end();it++){
                update(it->y, it->z, sm[it-s.begin()]);
            }
        }
        fout<<sum1<<'\n';
        for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=0;
        sum1=0;
    }
    return 0;
}