Cod sursa(job #2503383)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 2 decembrie 2019 22:46:08
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <cstring>
#define y first
#define z second
using namespace std;

ifstream fin("cutii.in");
ofstream fout("cutii.out");

int n,T,i,j,k,st,dr,mid,cnt,u,sol,m,p1,p2,r;
pair<int,int> v[3501];
int a[3501][3501];

void upd(int y, int z){
    for(int p1=y; p1<=n; p1+=(p1&-p1))
        for(int p2=z; p2<=n; p2+=(p2&-p2))
            a[p1][p2]=max(a[p1][p2],m+1);
}

void rst(int y, int z){
    for(int p1=y; p1<=n; p1+=(p1&-p1))
        for(int p2=z; p2<=n; p2+=(p2&-p2))
            a[p1][p2]=0;
}

int query(int y, int z){
    r=0;
    for(int p1=y; p1; p1-=(p1&-p1))
        for(int p2=z; p2; p2-=(p2&-p2))
            r=max(r,a[p1][p2]);

    return r;
}

int main(){
    fin>>n;
    for(fin>>T;T;T--){
        for(i=1;i<=n;i++){
            fin>>j;
            fin>>v[j].y>>v[j].z;
        }

        sol=-1;
        for(i=1;i<=n;i++){
            m=query(v[i].y, v[i].z);
            sol=max(sol,m+1);
            upd(v[i].y, v[i].z);
        }
        fout<<sol<<"\n";

        for(i=1;i<=n;i++)
            rst(v[i].y, v[i].z);
    }

    return 0;
}