设为首页 加入收藏

TOP

HDU 3642――Get The Treasury(线段树+扫描线+离散化+体积交多次)(二)
2015-07-20 17:35:16 来源: 作者: 【 】 浏览:8
Tags:HDU 3642 Get The Treasury 线段 扫描 离散 体积
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; }


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇你好,C++(12)如何管理多个类型.. 下一篇HDU 4414 Finding crosses(dfs)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)