Cod sursa(job #1426303)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 29 aprilie 2015 13:19:01
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#define z first
#define x second.first
#define y second.second
#define ub(x) (x&(-x))
#include <algorithm>
#define NM 3505

using namespace std;

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

int i,j,X,Y,d,aib[NM][NM],n,t;
pair<int, pair<int,int> > a[NM];
inline int mx(int a,int b)
{
    return (a<b?b:a);
}
inline int Query(int xx,int yy)
{
    int i,j,nr=0;
    for(i=xx;i;i-=ub(i))
    for(j=yy;j;j-=ub(j))
    nr=mx(nr,aib[i][j]);
    return nr;
}
inline void Insert(int xx,int yy,int v)
{
    int i,j;
    for(i=xx;i<=n;i+=ub(i))
    for(j=yy;j<=n;j+=ub(j))
    aib[i][j]=mx(aib[i][j],v);
}
inline void clear(int xx,int yy)
{
    int i,j;
    for(i=xx;i<=n;i+=ub(i))
    for(j=yy;j<=n;j+=ub(j))
    aib[i][j]=0;
}
int main()
{
    f>>n>>t;
    while(t--)
    {
         for(i=1;i<=n;++i) f>>a[i].x>>a[i].y>>a[i].z;
         sort(a+1,a+n+1);
         for(i=1;i<=n;++i)
         {
             X=a[i].x;Y=a[i].y;
             d=Query(X-1,Y-1)+1;
             Insert(X,Y,d);
         }
         g<<Query(n,n)<<'\n';
         for(i=1;i<=n;++i) clear(a[i].x,a[i].y);
    }
    return 0;
}