Cod sursa(job #1481411)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 4 septembrie 2015 13:35:01
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<stdio.h>
#include<stdlib.h>
int i,n,t,l[2],m,k,e[3501],a[3501],b[3501],c[3501],d[3501],r[2],w,j,v;
typedef struct N {
    int x[2];
    struct N *l,*r;
}K;
K *u;
void I(K *&u,int d[],int k) {
    if(!u) {
        u=(K*)malloc(sizeof(K));
        u->x[0]=d[0],u->x[1]=d[1],u->l=u->r=NULL;
    }
    else if(d[k]<u->x[k])
        I(u->l,d,1-k);
    else
        I(u->r,d,1-k);
}
void P(K *&u,int l[],int r[],int k,int *w) {
    if(!u)
        return;
    if(l[0]<=u->x[0]&&r[0]>=u->x[0]&&l[1]<=u->x[1]&&r[1]>=u->x[1])
        (*w)++;
    if(l[k]<=u->x[k])
        P(u->l,l,r,1-k,w);
    if(r[k]>=u->x[k])
        P(u->r,l,r,1-k,w);
}
int main() {
    freopen("cutii.in","r",stdin),freopen("cutii.out","w",stdout),scanf("%d%d",&n,&t);
    for(;t;t--) {
    	for(i=1;i<=n;i++)
            scanf("%d%d%d",&e[i],&a[i],&b[i]),c[e[i]]=a[i],d[e[i]]=b[i];
        for(m=k=0,i=1;i<n-1;i++) {
            u=NULL,l[0]=c[i],l[1]=d[i],I(u,l,k),r[0]=c[i+1],r[1]=d[i+1],I(u,r,k),k=1-k,w=c[i]<c[i+1]&&d[i]<d[i+1]?2:1,m=m<w?w:m;
            for(j=i+2;j<=n;j++)
                r[0]=c[j],r[1]=d[j],I(u,r,k),v=0,P(u,l,r,k,&v),k=1-k,w=v>w?(w+1):w,m=m<w?w:m;
        }
        printf("%d\n",m);
	}
}