Cod sursa(job #1832555)

Utilizator andrei-sasAndrei Sas-Miresan andrei-sas Data 20 decembrie 2016 12:47:47
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream si("cutii.in");
ofstream so("cutii.out");
struct cutie
{
    int x,y,z;
    bool operator <(const cutie &val)const
    {
        return x<val.x;
    }
}v[3510];
int aib[3505][3505],n;
void upd(int x,int y,int s)
{
    int i,j;
    for(i=x;i<=n;i+=i&(-i))
        for(j=y;j<=n;j+=j&(-j))
            aib[i][j]=max(aib[i][j],s);
}

int query(int x,int y)
{
    int s=0,i,j;
    for(i=x;i>=1;i-=i&(-i))
        for(j=y;j>=1;j-=j&(-j))
            s=max(s,aib[i][j]);
    return s;
}

void gol(int x,int y)
{
    int i,j;
    for(i=x;i<=n;i+=i&(-i))
        for(j=y;j<=n;j+=j&(-j))
            aib[i][j]=0;
}
int main()
{
    int q;
    si>>n>>q;
    int i;
    while(q--)
    {
        for(i=1;i<=n;++i)
            si>>v[i].x>>v[i].y>>v[i].z;
        sort(v+1,v+1+n);
        int s,maxx=0;
        for(i=1;i<=n;++i)
        {
            s=query(v[i].y,v[i].z)+1;
            maxx=max(maxx,s);
            upd(v[i].y,v[i].z,s);
        }
        so<<maxx<<'\n';
        for(i=1;i<=n;++i)
            gol(v[i].y,v[i].z);
    }
    return 0;
}