Cod sursa(job #1073429)

Utilizator alexpascadiAlexandru Pascadi alexpascadi Data 6 ianuarie 2014 11:02:12
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
using namespace std;

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

const int N=3501;
int r[N][N],n,T,v1[N],v2[N],p,q;

int query(int i, int j)
{
    int dmax=0;
    for(p=i;p>0;p-=p&-p)
        for(q=j;q>0;q-=q&-q)
            if(r[p][q]>dmax) dmax=r[p][q];
    return dmax;
}

void update(int i, int j, int val)
{
    for(p=i;p<=n;p+=p&-p)
        for(q=j;q<=n;q+=q&-q)
            if(r[p][q]<val) r[p][q]=val;
}

void Reset(int i, int j)
{
    for(p=i;p<=n;p+=p&-p)
        for(q=j;q<=n;q+=q&-q)
            r[p][q]=0;
}

int main()
{
    int k,i,x,y,z,maxim,rez;
    in>>n>>T;
    for(k=1;k<=T;k++)
    {
        for(i=1;i<=n;i++)
        {
            in>>x>>y>>z;
            v1[x]=y;
            v2[x]=z;
        }

        maxim=-1;

        for(i=1;i<=n;i++)
        {
            rez=query(v1[i],v2[i])+1;
            update(v1[i],v2[i],rez);
            if(maxim<rez) maxim=rez;
        }

        out<<maxim<<"\n";

        for(i=1;i<=n;i++)
            Reset(v1[i],v2[i]);
    }

    return 0;
}