Cod sursa(job #949321)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 13 mai 2013 13:03:39
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

struct cutie
{
    int x,y,z;
} a[3600];

int val[3600][3600],n;

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

inline int maxim(int a, int b)
{
    return a>b ? a:b;
}


bool cmp(cutie a, cutie b)
{
    if(a.x<b.x)
        return true;
    if(a.x>b.x)
        return false;
    if(a.y>b.y)
        return true;
    if(a.y<b.y)
        return false;
    if(a.z>b.z)
        return true;
    return false;
}

int querry(int x, int y)
{
    int m=-1,y1;
    while(x)
	{
		y1=y;
        while(y1)
        {
            m=maxim(val[x][y-1],m);
			y1-=(y1 & -y1);
		}
		x-=(x & -x);
	}
	return m;
}

void update(int x , int y)
{
	int y1,k=querry(x-1,y-1);
	while(x<=n)
	{
		y1=y;
        while(y1<=n)
        {
            val[x][y1]=maxim(val[x][y-1],k+1);
			y1+=(y1 & -y1);
		}
		x+=(x & -x);
	}
}

void solve()
{
    int i;
    for(i=1;i<=n;++i)
    {
        in>>a[i].x>>a[i].y>>a[i].z;
    }
    sort(a+1,a+n+1,cmp);
    for(i=1;i<=n;++i)
    {
        update(a[i].y,a[i].z);
    }
    out<<querry(n,n)<<"\n";
}

int main()
{
    int i,t;
    in>>n>>t;
    for(i=1;i<=t;++i)
        solve();
    return 0;
}