hdu 3642 Get The Treasury
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)
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.
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.
single line. a is the case number, and b is the minimum volume of treasury. The
case number is counted from one.
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
Case 2: 8
#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的更多相关文章
- hdu 3642 Get The Treasury(扫描线)
pid=3642" style="">题目链接:hdu 3642 Get The Treasury 题目大意:三维坐标系,给定若干的长方体,问说有多少位置被覆盖3次 ...
- HDU 3642 - Get The Treasury - [加强版扫描线+线段树]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3642 Time Limit: 10000/5000 MS (Java/Others) Memory L ...
- HDU 3642 Get The Treasury (线段树扫描线)
题意:给你一些长方体,问你覆盖三次及以上的体积有多大 首先我们观察x轴y轴一样很大,但是z轴很小,所以我们可以枚举z轴(-500,500),注意我们枚举的是每一段长度为一的z轴的xy轴的面积而不是点. ...
- HDU 3642 Get The Treasury (线段树扫描线,求体积并)
参考链接 : http://blog.csdn.net/zxy_snow/article/details/6870127 题意:给你n个立方体,求覆盖三次以上(包括三次)的区域的体积 思路:先将z坐标 ...
- HDU 3642 Get The Treasury 线段树+分层扫描线
http://www.acmerblog.com/hdu-3642-get-the-treasury-6603.html 学习:三维就是把竖坐标离散化分层,每一层进行线段树二维面积并就好了
- hdu 3642 Get The Treasury (三维的扫描线)
题目大意: 给出N个立方体. 求一个三维空间中被包围三次的空间的体积之和. 思路分析: 发现Z的范围非常小.那么我们能够枚举Z轴,然后对 x y做扫描线. 并且不用枚举全部的Z ,仅仅须要将Z离散化之 ...
- HDU - 3642 Get The Treasury(线段树求体积交)
https://cn.vjudge.net/problem/HDU-3642 题意 求立方体相交至少3次的体积. 分析 三维的呢..首先解决至少覆盖三次的问题.则用三个标记,更新时的细节要注意. 注意 ...
- HDU 3642 Get The Treasury ( 线段树 求长方体体积并 )
求覆盖三次及其以上的长方体体积并. 这题跟 http://wenku.baidu.com/view/d6f309eb81c758f5f61f6722.html 这里讲的长方体体积并并不一样. 因为本题 ...
- Q - Get The Treasury - HDU 3642 (扫面线求体积)
题意:求被三个或三个以上立方体重合的体积 分析:就是平面面积的加强,不过归根还是一样的,可以把z轴按照从小向大分区间N个,然后可以得到N个平面,用平面重复三次以上的在和高度计算体积. ******** ...
随机推荐
- JavaScript函数与对象
函数 函数的定义 JavaScript中的函数和Python中的非常类似,只是定义方式有点区别. // 普通函数定义 function f1() { console.log("Hello w ...
- HDU1166敌兵布阵(线段树,树状数组)
题面 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况 ...
- linux系统文件扩展名介绍
1.源码tar.tar.gz .tgz.zip.tar.bz 表示压缩文件,创建命令等 2.sh表示shell脚本文件,通过shell语言开发的程序. 3.pl 表示perl语言文件,通过perl语言 ...
- 【2016北京集训测试赛】river
HINT 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. [吐槽] 嗯..看到这题的想法的话..先想到了每个点的度为2,然后就有点不知所措了 隐隐约约想到了网络流,但并没 ...
- 同一台电脑同时装Oracle客户端和服务端
1.如果之前安装过Oracle,Win+R输入Services.msc,关掉以Oracle开头的服务(卸载Oracle服务端和客户端步骤一样,见另外一篇帖子) 2.Win+R输入regedit打开注册 ...
- 笔记-JS高级程序设计-基本概念篇
1:JS中的一切(变量,函数名和操作符)都是区分大小写的 2:标识符(变量,函数,属性的名字,以及函数的参数),第一个字符必须是字母,下划线,或者美元$,书写方式采用驼峰式,不能将关键字作为标识符. ...
- LCA倍增算法
LCA 算法是一个技巧性很强的算法. 十分感谢月老提供的模板. 这里我实现LCA是通过倍增,其实就是二进制优化. 任何一个数都可以有2的阶数实现 例如16可以由1 2 4 8组合得到 5可以由1 2 ...
- 移动端tab滑动和上下拉刷新加载
移动端tab滑动和上下拉刷新加载 查看demo(请在移动端模式下查看) 查看代码 开发该插件的初衷是,在做一个项目时发现现在实现移动端tab滑动的插件大多基于swiper,swiper的功能太强大而我 ...
- react实战第一步--搭建项目
使用 create-react-app 快速构建 React 开发环境 1.cnpm install -g create-react-app 2.create-react-app react2(rea ...
- pods 报错There may only be up to 1 unique SWIFT_VERSION per target
zhangpengdeMacBook-Pro:Jump zhangpeng$ pod install Analyzing dependencies [!] There may only be up t ...