1]-x[l]; else if(l==r) twice[rt]=0; else if(cnt[rt]==1) twice[rt]=once[rt<<1]+once[rt<<1|1]; else twice[rt]=twice[rt<<1]+twice[rt<<1|1]; if(cnt[rt]>2) more[rt]=x[r+1]-x[l]; else if(l==r) more[rt]=0; else if(cnt[rt]==2) more[rt]=once[rt<<1]+once[rt<<1|1]; else if(cnt[rt]==1) more[rt]=twice[rt<<1]+twice[rt<<1|1]; else more[rt]=more[rt<<1]+more[rt<<1|1]; } void update(int L,int R,int c,int l,int r,int rt) { if(L<=l&&r<=R) { cnt[rt]+=c; push_up(rt,l,r); return ; } int m=(l+r)>>1; if(L<=m) update(L,R,c,lson); if(m
z[i]){ int x1=cube[j].a.x,x2=cube[j].b.x; int y1=cube[j].a.y,y2=cube[j].b.y; ss[tot++]=Seg(x1,x2,y1,1); ss[tot++]=Seg(x1,x2,y2,-1); } }sort(ss,ss+tot); memset(cnt,0,sizeof(cnt)); memset(once,0,sizeof(once)); memset(twice,0,sizeof(twice)); memset(more,0,sizeof(more)); for(int j=0;j
>T; while(T--){ int m=0; cin>>n; while(n--){ cube[m].a.get(); x[m<<1]=cube[m].a.x,z[m<<1]=cube[m].a.z; cube[m].b.get(); x[m<<1|1]=cube[m].b.x,z[m<<1|1]=cube[m].b.z; m++; } printf("Case %d: ",cas++); solve(m); } return 0; }
|