Cod sursa(job #1231316)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 20 septembrie 2014 11:50:02
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin ("cutii.in");
ofstream fout ("cutii.out");

int a[3510][3510];
int n,t,maxim,i,j,sum,k;

struct data {
    int x;
    int y;
    int z;
}v[3510];

bool cmp (data x, data y) {
    return x.z<y.z;
}

void update(int x,int y) {

    for (int i=x;i<=n;i+=(i&(-i)))
        for (int j=y;j<=n;j+=(j&(-j)))
            a[i][j]=max(a[i][j],sum+1);
}

void query (int x,int y) {

    for (int i=x; i>0; i-=(i&(-i)))
        for (int j=y;j>0;j-=(j&(-j)))
            sum=max(sum,a[i][j]);
    if (sum+1>maxim)
        maxim=sum+1;
}

int main () {

    fin>>n>>t;

    while (t--) {
        maxim=0;
        for (i=1;i<=n;i++)
            fin>>v[i].x>>v[i].y>>v[i].z;
        sort (v+1,v+n+1,cmp);
        for (i=1;i<=n;i++) {
            sum=0;
            query (v[i].x-1,v[i].y-1);
            update (v[i].x,v[i].y);
        }
        fout<<maxim<<"\n";
        for (i=1;i<=n;i++) {
            for (k=v[i].x;k<=n;k+=(k&(-k)))
                for (j=v[i].y;j<=n;j+=(j&(-j)))
                    a[k][j]=0;
        }
    }

    return 0;
}