Cod sursa(job #2940921)

Utilizator alexddAlexandru Dima alexdd Data 16 noiembrie 2022 19:18:13
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n;
pair<int,pair<int,int>> cutii[3501];
int aib[3501][3501];
void reset_aib(int n)
{
    for(int i=0;i<=n;i++)
        for(int j=0;j<=n;j++)
            aib[i][j]=0;
}

int qry(int poz2,int poz3)
{
    int rez=0;
    for(int i=poz2;i>0;i-=(i&(-i)))
        for(int j=poz3;j>0;j-=(j&(-j)))
            rez=max(rez,aib[i][j]);
    return rez;
}
void upd(int poz2, int poz3, int newval)
{
    for(int i=poz2;i<=n;i+=(i&(-i)))
        for(int j=poz3;j<=n;j+=(j&(-j)))
            aib[i][j]=max(aib[i][j],newval);
}
void res(int poz2, int poz3)
{
    for(int i=poz2;i<=n;i+=(i&(-i)))
        for(int j=poz3;j<=n;j+=(j&(-j)))
            aib[i][j]=0;
}
int main()
{
    int t;
    fin>>n>>t;
    while(t--)
    {
        for(int i=0;i<n;i++)
        {
            int x,y,z;
            fin>>x>>y>>z;
            cutii[i]={x,{y,z}};
        }
        sort(cutii,cutii+n);
        int cur;
        for(int i=0;i<n;i++)
        {
            cur=qry(cutii[i].second.first,cutii[i].second.second)+1;
            upd(cutii[i].second.first,cutii[i].second.second,cur);
        }
        fout<<qry(n,n)<<"\n";
        for(int i=0;i<n;i++)
        {
            res(cutii[i].second.first,cutii[i].second.second);
        }
    }
    return 0;
}