Cod sursa(job #1232118)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 22 septembrie 2014 01:09:49
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct cut{
    int a;
    int b;
    int c;
}v[4000];
int n,t,i,j,ii,vmax,a[3600][3600],s;
FILE *f,*g;
int cmp(cut x,cut y){
    return x.a<y.a;
}
int maxim(int a,int b){
    if(a>b)
        return a;
    return b;
}
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]=maxim(a[i][j],s+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)){
            s=maxim(s,a[i][j]);
        }
    }
    vmax=maxim(s+1,vmax);
}
int main(){
    f=fopen("cutii.in","r");
    g=fopen("cutii.out","w");
    fscanf(f,"%d%d",&n,&t);
    while(t--){
        vmax=0;
        for(i=1;i<=n;i++){
            fscanf(f,"%d%d%d",&v[i].a,&v[i].b,&v[i].c);
        }
        sort(v+1,v+n+1,cmp);
        for(i=1;i<=n;i++){
            s=0;
            query(v[i].b-1,v[i].c-1);
            update(v[i].b,v[i].c);
        }
        fprintf(g,"%d\n",vmax);
        for(i=1;i<=n;i++){
            for(j=v[i].b;j<=n;j+=(j&-j)){
                for(ii=v[i].c;ii<=n;ii+=(i&-i)){
                    a[j][ii]=0;
                }
            }
        }
    }




    fclose(f);
    fclose(g);
    return 0;
}