题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3265

方法 : 线段树 + 扫描线

昨晚做了哈,想用个高效的方法(每个“回”字只用两次),貌似想搓了,不得已重新回到暴力(每个“回”字分成4份)。

另外,因为利用的是点化区间的方法。RE了一次,原因是没判断 if(p[i].y2>p[i].y1) , 题目中两者是有可能相等的。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll (v<<1)
#define rr (v<<1|1)
#define tmid ((l+r)>>1)
using namespace std;
const int maxn=50000;
struct Node{
int x,y1,y2,f;
Node(){}
Node(int xx,int yy1,int yy2,int ff){
x=xx,y1=yy1,y2=yy2,f=ff;
}
}p[8*maxn+100];
int cmp(Node a,Node b){
return a.x!=b.x?a.x<b.x:a.f>b.f;
}
int rec[4*maxn+100],len[4*maxn+100];
void update(int val,int L,int R,int l,int r,int v){
if(L<=l && r<=R) rec[v]+=val;
else{
if(L<=tmid) update(val,L,R,l,tmid,ll);
if(R>tmid) update(val,L,R,tmid+1,r,rr);
}
if(rec[v]) len[v]=r-l+1;
else if(l==r) len[v]=0;
else len[v]=len[ll]+len[rr];
}
int main(){
int x1,x2,y1,y2,x3,x4,y3,y4;
int n,cntp,i;
__int64 sum;
while(~scanf("%d",&n),n){
cntp=0;
while(n--){
scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
p[cntp++]=Node(x1,y1,y2,1);
p[cntp++]=Node(x3,y1,y2,-1);
p[cntp++]=Node(x4,y1,y2,1);
p[cntp++]=Node(x2,y1,y2,-1);
p[cntp++]=Node(x3,y1,y3,1);
p[cntp++]=Node(x4,y1,y3,-1);
p[cntp++]=Node(x3,y4,y2,1);
p[cntp++]=Node(x4,y4,y2,-1);
}
sort(p,p+cntp,cmp);
memset(rec,0,sizeof(rec));
memset(len,0,sizeof(len));
sum=0;
for(i=0;i<cntp-1;i++){
if(p[i].y2>p[i].y1)update(p[i].f,p[i].y1,p[i].y2-1,0,maxn-1,1);
sum+=(__int64)len[1]*(p[i+1].x-p[i].x);
}
printf("%I64d\n",sum);
}
return 0;
} 

HDU 3265 - Posters相关推荐

  1. hdu 3265 Posters

    ///给你若干个没有交集的圆,以其中一个圆的圆心为圆心做一个圆 ///使得这个圆至少包含所有圆面积的一半,求这个圆最小的半径 # include <stdio.h> # include & ...

  2. HDU 3265(矩形面积并-分割矩形)

    Posters Problem Description 有很多海报,每个海报都被减去了一个矩形(可能全减),现在给出没张海报的位置,求它们的面积并. 保证坐标在(0, 0)到(50000, 50000 ...

  3. hdu 3265 线段树扫描线(拆分矩形)

    题意:        给你n个矩形,每个矩形上都有一个矩形的空洞,所有的矩形都是平行于x,y轴的,最后问所有矩形的覆盖面积是多少. 思路:       是典型的矩形覆盖问题,只不过每个矩形上多了一个矩 ...

  4. 响应式扩展_响应式和无限扩展的JS动画

    响应式扩展 Back in late 2012 it was not easy to find open source projects using requestAnimationFrame() - ...

  5. android实现首页倒计时,android 利用CountDownTimer实现时分秒倒计时效果

    利用name或id属性设置页面跳转的锚点 理论准备         网页中的链接按照链接路径的不同,可以分为3种类型,分别是内部类型.锚点链接和外部链接:         按照使用对象的不同,网页中的 ...

  6. 扫描线三巨头 hdu1928hdu 1255 hdu 1542 [POJ 1151]

    学习链接:http://blog.csdn.net/lwt36/article/details/48908031 学习扫描线主要学习的是一种扫描的思想,后期可以求解很多问题. 扫描线求矩形周长并 hd ...

  7. HDU题目分类大全【大集合】

    基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.  1032.1037.1040.1048.1056.105 ...

  8. HDU 5643 King's Game 打表

    King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...

  9. 转载:Hdu 题目分类

    原址点击 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056. ...

最新文章

  1. leetcode005 longest_palidrome
  2. tf.io.gfile.glob 遍历文件
  3. SDNU 1462.时间转换
  4. ubuntu java classpath_java – 如何为Ubuntu中的文件夹设置CLASSPATH变量
  5. 操作篇 ospf认识和应用
  6. 使用 Hexo + Next 搭建静态博客
  7. 基于 axios 的 Vue 项目 http 请求优化
  8. yum第三方安装-软件包没签名及更新错误
  9. SSM框架整合(xml配置)
  10. [BZOJ 3561] DZY Loves Math VI
  11. 应用安全系列之三十:任意重定向
  12. 如何在被伽卡他卡教师端控制时解除控制
  13. 软件工程专业四个方向
  14. Origin绘图—如何添加参考线
  15. matlab测量正六边形边长,计算边长已知的正六边形面积的方法
  16. COLLATE utf8_general_ci;是什么意思?
  17. LDPC译码器的FPGA实现
  18. 802.11 协议介绍
  19. 哈工大计算机学院美女多吗,16所大学男女比例:电子科大最高,哈工大、西电其次,复旦最均衡...
  20. azure linux 配置端口,快速入门 - 在 Azure 门户中创建 Linux VM - Azure Virtual Machines | Microsoft Docs...

热门文章

  1. excel自定义格式分钟计时_拒绝加班做表格!只用Excel自定义格式1分钟做一份完整的表格...
  2. 关于Too many re-renders. React limits the number of renders to prevent an infinite loop.的解决方案
  3. 制作可执行的JAR文件包及jar命令详解
  4. 通过BL102实现Modbus PLC接入Thingsboard
  5. 支付宝APP支付申请配置过程详解
  6. Game Hacking Fundamentals 学习笔记1
  7. Cinemachine 之简单的相机跟随
  8. 圣诞礼物c语言代码大全,圣诞节到咯,教大家用C语言画个圣诞树
  9. linux服务器创建用户
  10. 横摆角速度的仿真模型建立