Cod sursa(job #1700954)

Utilizator Bodo171Bogdan Pop Bodo171 Data 11 mai 2016 20:43:38
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include<fstream>
using namespace std;
short q[3505][3505],a[3505],b[3505],best[3505][3505],i,j,n,t,c,d,x,y,z,tip,maxim,cnt;
inline int lbit(int x)
{
    return ((x^(x-1))&x);
}
void update(int x,int y,int val)
{
    for(c=x;c<=n;c+=lbit(c))
        for(d=y;d<=n;d+=lbit(d))
            if(best[c][d]<val||q[c][d]!=cnt)
            {best[c][d]=val;q[c][d]=cnt;}

}
int query(int x,int y)
{
    int mx=0;
    for(c=x;c>0;c-=lbit(c))
        for(d=y;d>0;d-=lbit(d))
         if(q[c][d]==cnt&&best[c][d]>mx)mx=best[c][d];
    return mx;
}
int main()
{
     ifstream f("cutii.in");
     ofstream g("cutii.out");
     f>>n>>t;
     for(cnt=1;cnt<=t;cnt++)
     {
         maxim=0;
        for(i=1;i<=n;i++)
         {f>>x>>y>>z;a[x]=y;b[x]=z;}
         for(i=1;i<=n;i++)
         {
             tip=query(a[i],b[i]);
             best[a[i]][b[i]]=tip+1;
             update(a[i],b[i],tip+1);
             if(best[a[i]][b[i]]>maxim) maxim=best[a[i]][b[i]];
         }
         g<<maxim<<'\n';
     }
    return 0;
}