POJ1177 Picture 线段树+离散化+扫描线

求最终的覆盖图形周长,写这种代码应该短而精确,差的比较远

/*
Problem: 1177        User: 96655
Memory: 348K        Time: 32MS
Language: C++        Result: Accepted
*/
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include <algorithm>
using namespace std;
const int maxn=10010;
struct Node
{int s,t,num,len,cover;bool lb,rb;void change(int o){cover+=o;if(cover==0)len=lb=rb=num=0;else len=t-s,lb=1,rb=1,num=1;}
} node[maxn<<2];
struct Line
{int x,y1,y2,flag;void fun(int a,int b,int c,int d){x=a,y1=b,y2=c,flag=d;}bool operator<(const Line &e)const{if(x==e.x)return flag>e.flag;return x<e.x;}
} line[maxn];
int y[maxn];
void build(int rt,int l,int r)
{node[rt].s=y[l];node[rt].t=y[r];node[rt].num=node[rt].len=node[rt].cover=0;if(l+1==r)return;int m=(l+r)>>1;build(rt*2,l,m);build(rt*2+1,m,r);
}
void update_line(int rt)
{node[rt].lb=node[rt*2].lb;node[rt].rb=node[rt*2+1].rb;node[rt].num=node[rt*2].num+node[rt*2+1].num-node[rt*2].rb*node[rt*2+1].lb;
}
void update_len(int rt)
{node[rt].len=node[rt*2].len+node[rt*2+1].len;
}
void update(int rt,int l,int r,Line e)
{if(l+1==r){node[rt].change(e.flag);return;}int m=(l+r)>>1;if(e.y1<node[rt*2].t)update(rt*2,l,m,e);if(e.y2>node[rt*2+1].s)update(rt*2+1,m,r,e);update_len(rt);update_line(rt);
}
int main()
{int n,x1,x2,y1,y2,cnt=0,d=1;scanf("%d",&n);for(int i=1; i<=n; i++){scanf("%d%d%d%d",&x1,&y1,&x2,&y2);line[++cnt].fun(x1,y1,y2,1);y[cnt]=y1;line[++cnt].fun(x2,y1,y2,-1);y[cnt]=y2;}sort(y+1,y+1+cnt);sort(line+1,line+1+cnt);for(int i=2; i<=cnt; ++i)if(y[i]!=y[i-1])y[++d]=y[i];build(1,1,d);int perimeter=0;int now_len=0;int now_num=0;for(int i=1; i<=cnt; ++i){update(1,1,d,line[i]);if(i>1)perimeter+=2*now_num*(line[i].x-line[i-1].x);perimeter+=abs(node[1].len-now_len);now_num=node[1].num;now_len=node[1].len;}printf("%d\n",perimeter);return 0;
}
View Code

 

转载于:https://www.cnblogs.com/shuguangzw/p/4956291.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DA模拟量控制外接600V高压直流源-设计分析

一、STM32 12位AD DA线性度测试 配置STM32 DA为12bit输出&#xff0c;AD为12bit检测&#xff0c;测试AD和DA的线性度与误差。DAC从0到2.49V步进1mV。ErrorDAC 为标准值减去 ADC的测量值。 板子的Vref2.5V&#xff0c;ADC和DAC的极限为2.5V&#xff0c;测试时直接用杜邦线连接…

[react] React的displayName有什么作用?

[react] React的displayName有什么作用&#xff1f; displayName:定义调试时的组件name 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

使用 rose 将 c++代码转换为 uml 类图

From: http://www.cppblog.com/prayer/archive/2009/12/24/103954.html 阅读本文章&#xff0c;你需要对 uml 有简单的了解&#xff0c;懂得以下术语&#xff1a; 类图( class diagram ) 即 c 中的 class 。 聚合( Aggregation ) 即我们c中的引用。表现为 class 头文件中的…

android中的AIDL进程间通信

关于IPC应该不用多介绍了&#xff0c;Android系统中的进程之间不能共享内存&#xff0c;那么如果两个不同的应用程序之间需要通讯怎么办呢&#xff1f;比如公司的一个项目要更新&#xff0c;产品的需求是依附于当前项目开发一个插件&#xff0c;但是呢这个插件功能以及界面比较…

某测试仪控制系统的设计方案--ARM+FPGA+NIOS

一、系统要求 控制功能&#xff1a;600V直流电源模块控制63dB程控衰减器触摸屏高频毫伏表示波器USB存储FAR计数整形阈值调节。 功能要求&#xff1a; 检测高压电源的Vref控制高压电源的Vset控制光脉冲幅度控制阈值计数幅度存储测量数据触摸屏通信示波器通信高频毫伏表通信光…

[react] 为什么属性使用className而不是class呢?

[react] 为什么属性使用className而不是class呢&#xff1f; class是关键字js会使用dom.className获取样式名&#xff0c;跟js保持一致 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣…

QT实现图像处理-傅立叶变换、傅立叶反变换、平滑、锐化与模板匹配

From: http://www.cnblogs.com/qytan36/archive/2010/04/04/1704226.html 实验环境&#xff1a; 1&#xff0c;Linux操作系统 2&#xff0c;QT3编程开发环境 3&#xff0c;C编程语言 傅立叶变换和傅立叶反变换 1.1. 主要源代码 readImage() 从图像中读取数据 writeImage() 往图…

Java finally语句到底是在return之前还是之后执行?

网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行&#xff1f;很多人都说不是&#xff0c;当然他们的回答是正确的&#xff0c;经过我试验&#xff0c;至少有两种情况下finally语句是不会被执行的&#xff1a; &#xff08;1&…

TLV5618 双路12位DAC 模拟SPI驱动

一、TLV65618芯片 TLV5618A 带掉电功能 2.7V-5.5V&#xff0c;低功耗双路 12 位数模转换器 特点 ●双路 12 位电压输出 DAC ●可编程调节转换时间 - 快速模式 3μs - 低速模式 10μs ●兼容 TMS320 和 SPI 串行接口 16位串行接口包含4位控制和12位数据。 二、驱动代码 采用模…

[react] React中你有使用过propType吗?它有什么作用?

[react] React中你有使用过propType吗&#xff1f;它有什么作用&#xff1f; 校验属性的合法性 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

python对json的相关操作

From: http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html 什么是json&#xff1a; JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3r…

UIbutton

第一、UIButton的定义 UIButton *button[[UIButton buttonWithType:(UIButtonType); 能够定义的button类型有以下6种&#xff0c; typedef enum { UIButtonTypeCustom 0, 自定义风格 UIButtonTypeRoundedRect, 圆角矩形 UIButtonTypeDetailDisclosure, 蓝色小箭头按钮&#xf…

MAX535 单路13位DAC 模拟SPI驱动

一、MAX535 max535是低功耗、13位、电压输出DAC&#xff0c;采用串行接口和MAX封装。MAX535通过单个5V/3.3V电源工作&#xff0c;仅需要280A电流工作。 MAX535/MAX5351适用于广泛的应用&#xff0c;包括工业过程控制。其他功能包括软件关机和开机复位。 DAC寄存器可以独立更…

[react] react多个setState调用的原理是什么?

[react] react多个setState调用的原理是什么&#xff1f; 同步调用多个setState&#xff0c;React并不会连续多次的进行更新操作&#xff0c;而是会将同步中的多个setState操作合成一个&#xff0c;只执行一次render操作 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前…

python Json的一点收获,自定义序列化方法

From: http://blog.csdn.net/jlnuboy/article/details/5732196 PyMOTW: json 模块&#xff1a; json目的&#xff1a; JavaScript对象格式序列器python版本&#xff1a; 2.6 json模块提供了一个类似于pickle中用于转换内存中python对象为一个序列表示形式(“JavaScript Objec…

Android的sdk、api及工程目录说明

SDK下包的说明 1&#xff1a;add-ons&#xff1a;Android开发需要的第三方文件和软件库 2&#xff1a;docs&#xff1a;Android的文档。包括开发指南、API参考、资源等 3&#xff1a;extras&#xff1a;扩展的附加包 4&#xff1a;platforms&#xff1a;你安装下载的所有Androi…

云服务器开启TCP Server 客户端无法连接的解决方法

一、问题描述 华为云服务器运行TCPServer后&#xff0c;等待客户端连接&#xff0c;客户端一直无法连接到服务器。经过测试&#xff0c;客户端可以ping通服务器的地址。 客户端网络防火墙已经完全放开。 二、解决办法 1、查看云服务器端的安全组&#xff0c;是否放开该端口。…

[react] 请描述下你对react的新特性Hooks的理解?它有哪些应用场景?

[react] 请描述下你对react的新特性Hooks的理解&#xff1f;它有哪些应用场景&#xff1f; 在 React 中使用 class 继承 React.Component&#xff0c;就可以在类里面使用各种各样的钩子函数&#xff0c;比如 componentWillMount、componentDidMount、componentWillUnmount 等。…

CSS 页面元素

1. 文字基本样式 font-familyfont-sizefont-weightfont-stylecolor2. 段落样式 text-indent&#xff1a;2em&#xff1b;&#xff08;缩进&#xff09;line-height&#xff1a;1.5&#xff1b;&#xff08;行高&#xff09;3. 特殊效果 &#xff1a;first-letter&#xff1b;&a…

STM32CubeMx HAL库使用硬件IIC读写AT24C02

介绍使用硬件IIC接口读写AT24C02&#xff0c;STM32自带硬件IIC&#xff0c;比较好用&#xff0c;没必要千篇一律的使用模拟IIC。作为一个IIC的使用例子&#xff0c;可以适当修改用于其他IIC接口设备通信控制。 一、测试环境 STM32F407CubeMx&#xff08;6.1.1&#xff09;MDK…