Cod sursa(job #976865)

Utilizator misinozzz zzz misino Data 24 iulie 2013 11:04:15
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream>
#include<algorithm>
#define cutie pair<pair<int,int>,int>
#define x first.first
#define y first.second
#define z second
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
int i,t,n,sol,d[3510],aib[3510][3510];
cutie a[3510];
inline bool cmp(cutie a,cutie b)
{
    return a.z<b.z;
}
inline void update(int xx,int yy,int v)
{
    for(int i=xx;i<=n;i+=(i)&(-i))
    for(int j=yy;j<=n;j+=(j)&(-j))
    aib[i][j]=max(aib[i][j],v);
}
inline int query(int xx,int yy)
{
    int rez=0;
    for(int i=xx;i;i-=(i)&(-i))
    for(int j=yy;j;j-=(j)&(-j))
    rez=max(rez,aib[i][j]);
    return rez;
}
inline void gol(int xx,int yy)
{
    for(int i=xx;i<=n;i+=(i)&(-i))
    for(int j=yy;j<=n;j+=(j)&(-j))
    aib[i][j]=0;
}
int main()
{
    f>>n>>t;
    for(;t;--t)
    {
        sol=0;
        for(i=1;i<=n;++i)
        f>>a[i].x>>a[i].y>>a[i].z;
        sort(a+1,a+n+1,cmp);
        for(i=1;i<=n;++i)
        {
            d[i]=query(a[i].x-1,a[i].y-1)+1;
            update(a[i].x,a[i].y,d[i]);
            sol=max(sol,d[i]);
        }
        g<<sol<<'\n';
        for(i=1;i<=n;++i)
        gol(a[i].x,a[i].y);
    }
}