HDU 3265 - Posters
题目地址: 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相关推荐
- hdu 3265 Posters
///给你若干个没有交集的圆,以其中一个圆的圆心为圆心做一个圆 ///使得这个圆至少包含所有圆面积的一半,求这个圆最小的半径 # include <stdio.h> # include & ...
- HDU 3265(矩形面积并-分割矩形)
Posters Problem Description 有很多海报,每个海报都被减去了一个矩形(可能全减),现在给出没张海报的位置,求它们的面积并. 保证坐标在(0, 0)到(50000, 50000 ...
- hdu 3265 线段树扫描线(拆分矩形)
题意: 给你n个矩形,每个矩形上都有一个矩形的空洞,所有的矩形都是平行于x,y轴的,最后问所有矩形的覆盖面积是多少. 思路: 是典型的矩形覆盖问题,只不过每个矩形上多了一个矩 ...
- 响应式扩展_响应式和无限扩展的JS动画
响应式扩展 Back in late 2012 it was not easy to find open source projects using requestAnimationFrame() - ...
- android实现首页倒计时,android 利用CountDownTimer实现时分秒倒计时效果
利用name或id属性设置页面跳转的锚点 理论准备 网页中的链接按照链接路径的不同,可以分为3种类型,分别是内部类型.锚点链接和外部链接: 按照使用对象的不同,网页中的 ...
- 扫描线三巨头 hdu1928hdu 1255 hdu 1542 [POJ 1151]
学习链接:http://blog.csdn.net/lwt36/article/details/48908031 学习扫描线主要学习的是一种扫描的思想,后期可以求解很多问题. 扫描线求矩形周长并 hd ...
- HDU题目分类大全【大集合】
基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056.105 ...
- HDU 5643 King's Game 打表
King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...
- 转载:Hdu 题目分类
原址点击 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056. ...
最新文章
- leetcode005 longest_palidrome
- tf.io.gfile.glob 遍历文件
- SDNU 1462.时间转换
- ubuntu java classpath_java – 如何为Ubuntu中的文件夹设置CLASSPATH变量
- 操作篇 ospf认识和应用
- 使用 Hexo + Next 搭建静态博客
- 基于 axios 的 Vue 项目 http 请求优化
- yum第三方安装-软件包没签名及更新错误
- SSM框架整合(xml配置)
- [BZOJ 3561] DZY Loves Math VI
- 应用安全系列之三十:任意重定向
- 如何在被伽卡他卡教师端控制时解除控制
- 软件工程专业四个方向
- Origin绘图—如何添加参考线
- matlab测量正六边形边长,计算边长已知的正六边形面积的方法
- COLLATE utf8_general_ci;是什么意思?
- LDPC译码器的FPGA实现
- 802.11 协议介绍
- 哈工大计算机学院美女多吗,16所大学男女比例:电子科大最高,哈工大、西电其次,复旦最均衡...
- azure linux 配置端口,快速入门 - 在 Azure 门户中创建 Linux VM - Azure Virtual Machines | Microsoft Docs...
热门文章
- excel自定义格式分钟计时_拒绝加班做表格!只用Excel自定义格式1分钟做一份完整的表格...
- 关于Too many re-renders. React limits the number of renders to prevent an infinite loop.的解决方案
- 制作可执行的JAR文件包及jar命令详解
- 通过BL102实现Modbus PLC接入Thingsboard
- 支付宝APP支付申请配置过程详解
- Game Hacking Fundamentals 学习笔记1
- Cinemachine 之简单的相机跟随
- 圣诞礼物c语言代码大全,圣诞节到咯,教大家用C语言画个圣诞树
- linux服务器创建用户
- 横摆角速度的仿真模型建立