Cod sursa(job #2940913)

Utilizator alexddAlexandru Dima alexdd Data 16 noiembrie 2022 19:09:45
Problema Cutii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#pragma GCC optimize("O2")
#include<fstream>
#include<algorithm>
#include<map>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n;
pair<int,pair<int,int>> cutii[3501];
int pas=0;
map<pair<int,int>,int> aib;
/*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);
}

int main()
{
    int t;
    fin>>n>>t;
    while(t--)
    {
        //reset_aib(n);
        aib.clear();
        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 rez=0,cur;
        for(int i=0;i<n;i++)
        {
            cur=qry(cutii[i].second.first-1,cutii[i].second.second-1)+1;
            rez=max(rez,cur);
            upd(cutii[i].second.first,cutii[i].second.second,cur);
        }
        fout<<rez<<"\n";
        pas++;
    }
    return 0;
}