Get The Treasury

http://acm.hdu.edu.cn/showproblem.php?pid=3642

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Problem Description
Jack knows that there is a great underground treasury
in a secret region. And he has a special device that can be used to detect
treasury under the surface of the earth. One day he got outside with the device
to ascertain the treasury. He chose many different locations on the surface of
the earth near the secret region. And at each spot he used the device to detect
treasury and got some data from it representing a region, which may contain
treasury below the surface. The data from the device at each spot is six
integers x1, y1, z1, x2,
y2 and z2 (x1<x2,
y1<y2, z1<z2). According to
the instruction of the device they represent the range of x, y and z coordinates
of the region. That is to say, the x coordinate of the region, which may contain
treasury, ranges from x1 to x2. So do y and z coordinates.
The origin of the coordinates is a fixed point under the ground.
Jack can’t
get the total volume of the treasury because these regions don’t always contain
treasury. Through years of experience, he discovers that if a region is detected
that may have treasury at more than two different spots, the region really exist
treasure. And now Jack only wants to know the minimum volume of the
treasury.
Now Jack entrusts the problem to you.

 
Input
The first line of the input file contains a single
integer t, the number of test cases, followed by the input data for each test
case.
Each test case is given in some lines. In the first line there is an
integer n (1 ≤ n ≤ 1000), the number of spots on the surface of the earth that
he had detected. Then n lines follow, every line contains six integers
x1, y1, z1, x2, y2 and
z2, separated by a space. The absolute value of x and y coordinates
of the vertices is no more than 106, and that of z coordinate is no
more than 500.

 
Output
For each test case, you should output “Case a: b” in a
single line. a is the case number, and b is the minimum volume of treasury. The
case number is counted from one.
 
Sample Input
2
1
0 0 0 5 6 4
3
0 0 0 5 5 5
3 3 3 9 10 11
3 3 3 13 20 45
 
Sample Output
Case 1: 0
Case 2: 8
 
Source
 
Recommend
lcy   |   We have carefully selected several similar
problems for you:  2871 3308 3641 3397 1540 
 
题意:求n个长方体至少相交3次的体积和
z这一维只有500,所以枚举z轴,然后就相当于二维的扫描线
线段树维护区间完全覆盖1、2、3次的长度
 
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
#define N 1001
#define lc k<<1,l,mid
#define rc k<<1|1,mid+1,r
struct node
{
int l,r,h,f;
bool operator < (node p)const
{
return h<p.h;
}
}a[N<<];
struct edge
{
int x,xx,y,yy,z,zz;
}b[N];
int sum1[N<<],sum2[N<<],sum3[N<<],f[N<<],has[N<<],has2[N<<];
long long ans;
int n,cnt,opl,opr,w;
void up(int k,int l,int r)
{
if(f[k]>=) sum3[k]=has2[r+]-has2[l];
else if(f[k]==)
{
sum3[k]=sum1[k<<]+sum1[k<<|];
sum2[k]=has2[r+]-has2[l];
}
else if(f[k]==)
{
sum3[k]=sum2[k<<]+sum2[k<<|];
sum2[k]=sum1[k<<]+sum1[k<<|];
sum1[k]=has2[r+]-has2[l];
}
else
{
sum3[k]=sum3[k<<]+sum3[k<<|];
sum2[k]=sum2[k<<]+sum2[k<<|];
sum1[k]=sum1[k<<]+sum1[k<<|];
}
}
void change(int k,int l,int r)
{
if(opl<=l && r<=opr)
{
f[k]+=w;
up(k,l,r);
return;
}
int mid=l+r>>;
if(opl<=mid) change(lc);
if(opr>mid) change(rc);
up(k,l,r);
}
int main()
{
int T;
scanf("%d",&T);
for(int t=;t<=T;t++)
{
ans=;
cnt=;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d%d%d%d%d",&b[i].x,&b[i].y,&b[i].z,&b[i].xx,&b[i].yy,&b[i].zz);
has[i*-]=b[i].z; has[i*]=b[i].zz;
}
sort(has+,has+*n+);
cnt=unique(has+,has+*n+)-(has+);
for(int i=;i<cnt;i++)
{
int sz=;
for(int j=;j<=n;j++)
if(b[j].z<=has[i] && b[j].zz>=has[i+])
{
a[++sz].l=b[j].x; a[sz].r=b[j].xx; a[sz].h=b[j].y; a[sz].f=;
a[++sz].l=b[j].x; a[sz].r=b[j].xx; a[sz].h=b[j].yy; a[sz].f=-;
has2[sz-]=b[j].x; has2[sz]=b[j].xx;
}
sort(has2+,has2+sz+);
int m=unique(has2+,has2+sz+)-(has2+);
sort(a+,a+sz+);
memset(sum1,,sizeof(sum1));
memset(sum2,,sizeof(sum2));
memset(sum3,,sizeof(sum3));
for(int j=;j<=sz;j++)
{
opl=lower_bound(has2+,has2+m+,a[j].l)-has2;
opr=lower_bound(has2+,has2+m+,a[j].r)-has2-;
w=a[j].f;
change(,,m);
ans+=1ll*sum3[]*(a[j+].h-a[j].h)*(has[i+]-has[i]);
}
}
printf("Case %d: %I64d\n",t,ans);
}
}
 

hdu 3642 Get The Treasury的更多相关文章

  1. hdu 3642 Get The Treasury(扫描线)

    pid=3642" style="">题目链接:hdu 3642 Get The Treasury 题目大意:三维坐标系,给定若干的长方体,问说有多少位置被覆盖3次 ...

  2. HDU 3642 - Get The Treasury - [加强版扫描线+线段树]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3642 Time Limit: 10000/5000 MS (Java/Others) Memory L ...

  3. HDU 3642 Get The Treasury (线段树扫描线)

    题意:给你一些长方体,问你覆盖三次及以上的体积有多大 首先我们观察x轴y轴一样很大,但是z轴很小,所以我们可以枚举z轴(-500,500),注意我们枚举的是每一段长度为一的z轴的xy轴的面积而不是点. ...

  4. HDU 3642 Get The Treasury (线段树扫描线,求体积并)

    参考链接 : http://blog.csdn.net/zxy_snow/article/details/6870127 题意:给你n个立方体,求覆盖三次以上(包括三次)的区域的体积 思路:先将z坐标 ...

  5. HDU 3642 Get The Treasury 线段树+分层扫描线

    http://www.acmerblog.com/hdu-3642-get-the-treasury-6603.html 学习:三维就是把竖坐标离散化分层,每一层进行线段树二维面积并就好了

  6. hdu 3642 Get The Treasury (三维的扫描线)

    题目大意: 给出N个立方体. 求一个三维空间中被包围三次的空间的体积之和. 思路分析: 发现Z的范围非常小.那么我们能够枚举Z轴,然后对 x y做扫描线. 并且不用枚举全部的Z ,仅仅须要将Z离散化之 ...

  7. HDU - 3642 Get The Treasury(线段树求体积交)

    https://cn.vjudge.net/problem/HDU-3642 题意 求立方体相交至少3次的体积. 分析 三维的呢..首先解决至少覆盖三次的问题.则用三个标记,更新时的细节要注意. 注意 ...

  8. HDU 3642 Get The Treasury ( 线段树 求长方体体积并 )

    求覆盖三次及其以上的长方体体积并. 这题跟 http://wenku.baidu.com/view/d6f309eb81c758f5f61f6722.html 这里讲的长方体体积并并不一样. 因为本题 ...

  9. Q - Get The Treasury - HDU 3642 (扫面线求体积)

    题意:求被三个或三个以上立方体重合的体积 分析:就是平面面积的加强,不过归根还是一样的,可以把z轴按照从小向大分区间N个,然后可以得到N个平面,用平面重复三次以上的在和高度计算体积. ******** ...

随机推荐

  1. Java汉字乱码问题

    window->preferences->输入框输入"encod" 将text file encoding 从default改成other utf-8 同理,css,H ...

  2. 【HDU 2063】过山车(二分图最大匹配模板题)

    题面 RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐.但是,每 ...

  3. 比较工具diif-vimdiff-windows比较工具详解

    以文件形式比较: # diff <变动前的文件> <变动后的文件> 以表格形式比较: #vimdiff FILE_LEFT FILE_RIGHT 或 # vim -d FILE ...

  4. Nginx负载均衡——扩展功能(NGINX Plus)

    本文主要是介绍了NGINX Plus的相关功能,横跨了NGINX Plus R5/R6/R7/R9等各个不同版本的更新. 什么是NGINX Plus? 顾名思义,就是Nginx的加强版或者扩展版.我们 ...

  5. 【Spring源码分析】非懒加载的单例Bean初始化过程(下篇)

    doCreateBean方法 上文[Spring源码分析]非懒加载的单例Bean初始化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下 ...

  6. Node.js 部署免费/自动续订 HTTPS

    随着互联网快速发展,互联网信息安全越来越受到大家重视,HTTPS 应该是近两年各大厂商都在尽力普及的技术之一.国内大厂基本上已经全面普及了 HTTPS. 本文首发于我的个人网站:听说 - https: ...

  7. Java微服务对UTC时间格式的处理

    一.背景 先说一下为什么要使用UTC时间.开发一个全球化的系统,服务端(Java微服务)集中部署在同一个地方,用户在全球通过浏览器.手机客户端访问.不同地区的时区是不一样的,同一个时间戳,不同的用户看 ...

  8. 20.DOM

    定义 文档对象模型(Document Object Model)是一种用于HTML和XML文档的编程接口. 查找元素 1.直接查找 document.getElementById 根据ID获取一个标签 ...

  9. CYQ.data 框架结构

    -------------------------V5.0开始(刚开始过滤版本:有些更新功能迁到V4,所以记录在V4那)-----------------------------7:Insert方法增 ...

  10. Lintcode245 Subtree solution 题解

    [题目描述] You have two every large binary trees:T1, with millions of nodes, and T2, with hundreds of no ...