Cod sursa(job #1659206)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 22 martie 2016 08:40:01
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<fstream>
#include<cstring>
using namespace std;
struct cutie
{
    int x,y,z;
}a[3501];
int arbint[3501][3501],n,val,t;
char last[3501][3501];
void update(int idx1,int idx2)
{
    for(int i=idx1;i<=n;i+=(i&-i))
      for(int j=idx2;j<=n;j+=(j&-j))
        if(last[i][j]==t)
          arbint[i][j]=max(arbint[i][j],val);
        else
        {
            arbint[i][j]=val;
            last[i][j]=t;
        }
}
int query(int idx1,int idx2)
{
    int Val=0;
    for(int i=idx1;i>0;i-=(i&-i))
      for(int j=idx2;j>0;j-=(j&-j))
        if(last[i][j]==t)
          Val=max(arbint[i][j],Val);
    return Val;
}
int main()
{
    ifstream f("cutii.in");
    ofstream g("cutii.out");
    int rez=0;
    f>>n>>t;
    while(t)
    {
        t--;
        rez=0;
        for(int i=1;i<=n;i++)
        {
            int x,y,z;
            f>>x>>y>>z;
            a[z].x=x;
            a[z].y=y;
            a[z].z=z;
        }
        for(int i=1;i<=n;i++)
        {
            val=query(a[i].x-1,a[i].y-1)+1;
            if(val>rez)
              rez=val;
            update(a[i].x,a[i].y);
        }
        g<<rez<<"\n";
    }
    return 0;
}