Cod sursa(job #2154053)

Utilizator MihalachiRazvanMihalachi Razvan MihalachiRazvan Data 6 martie 2018 17:48:49
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define dim 3502
#define zeros(x) ((x^(x-1))&x)
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
struct cutie
{
    int x,y,z;
}c[dim];
int AIB[dim][dim],val;
int N,T;
bool cmp(cutie a, cutie b)
{
    return a.x<b.x;
}
void update(int x,int y,int nr)
{
    for(int i=x;i<=N;i=i+zeros(i))
    {
        for(int j=y;j<=N;j=j+zeros(j))
        AIB[i][j]=max(AIB[i][j],nr);
    }
}
void init(int x,int y)
{
    for(int i=x;i<=N;i=i+zeros(i))
    { for(int j=y;j<=N;j=j+zeros(j))
    AIB[i][j]=0;}
}
int query(int x,int y)
{
    int maxi=0;
    for(int i=x;i>=1;i=i-zeros(i))
    {
        for(int j=y;j>=1;j=j-zeros(j))
        maxi=max(maxi,AIB[i][j]);
    }
    return maxi;
}
int main()
{
    fin>>N>>T;
    int i,j;
    for(i=1;i<=T;i++)
    {
        for(j=1;j<=N;j++)
        fin>>c[j].x>>c[j].y>>c[j].z;
        sort(c+1,c+N+1,cmp);
        for(int k=1;k<=N;k++)
        {
            val=1+query(c[k].y-1,c[k].z-1);
            update(c[k].y,c[k].z,val);
        }
        fout<<query(N,N)<<"\n";
        for(int k=1;k<=N;k++)
        init(c[k].y,c[k].z);
    }
    return 0;
}