Cod sursa(job #2046499)

Utilizator LauraNaduLaura Nadu LauraNadu Data 23 octombrie 2017 20:45:54
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
struct cutie
{
    int x;
    int y;
    int z;
} c[3503];
bool cmp(cutie a, cutie b)
{
    if(a.z==b.z)
        if(a.y==b.y)
            return a.x<b.x;
        else return a.y<b.y;
    return a.z<b.z;
}
int n, teste, i, aib[3503][3503], sol;
int query(int x, int y)
{
    int r=0;
    for(int i=x;i;i-=(i & -i))
        for(int j=y;j;j-=(j & -j))
            r=max(aib[i][j], r);
    return r;
}
void update(int x, int y, int r)
{
    for(int i=x;i<=n;i+=(i & -i))
        for(int j=y;j<=n;j+=(j & -j))
            aib[i][j]=max(aib[i][j], r);
}
int main()
{
    f>>n>>teste;
    while(teste!=0)
    {
        for(i=1;i<=n;i++)
            f>>c[i].x>>c[i].y>>c[i].z;
        sort(c+1,c+n+1, cmp);
        for(i=1;i<=n;i++)
        {
            sol=query(c[i].x-1, c[i].y-1)+1;
            update(c[i].x, c[i].y, sol);
        }
        g<<sol<<"\n";
        for(int k=1;k<=n;k++)
            for(i=c[k].x;i<=n;i+=(i & -i))
                for(int j=c[k].y;j<=n;j+=(j & -j))
                    aib[i][j]=0;
        teste--;
    }
    return 0;
}