Cod sursa(job #2643888)

Utilizator De_Azi_Ne_DopamAlex Ardelean De_Azi_Ne_Dopam Data 22 august 2020 01:32:59
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
struct mazan
{
    int x,y,z;
} v[3501];
int n,aib[3501][3501];
int lsb(int x)
{
    return x&-x;
}
bool cmp(mazan a,mazan b)
{
    return a.x<b.x;
}
int ans(int poz1,int poz2)
{
    int max1=0;
    for(; poz1>0; poz1-=lsb(poz1))
        for(int pozz2=poz2; pozz2>0; pozz2-=lsb(pozz2))
            max1=max(max1,aib[poz1][pozz2]);
    return max1;
}
void upd(int poz1,int poz2,int val)
{
    for(; poz1<=n; poz1+=lsb(poz1))
        for(int pozz2=poz2; pozz2<=n; pozz2+=lsb(pozz2))
            if(val>0)
                aib[poz1][pozz2]=max(aib[poz1][pozz2],val);
            else
                aib[poz1][pozz2]=0;
}
int main()
{
    int t,i,max1,x,j;
    in>>n>>t;
    while(t--)
    {
        max1=0;
        for(i=1; i<=n; i++)
            in>>v[i].x>>v[i].y>>v[i].z;
        sort(v+1,v+n+1,cmp);
        for(i=1; i<=n; i++)
        {
            x=ans(v[i].y,v[i].z)+1;
            max1=max(max1,x);
            upd(v[i].y,v[i].z,x);
        }
        for(i=1; i<=n; i++)
            upd(v[i].y,v[i].z,-1);
        out<<max1<<'\n';
    }
    return 0;
}