当前位置: 首页 > 编程日记 > 正文

codeforces 610D D. Vika and Segments(离散化+线段树+扫描线算法)

题目链接:

D. Vika and Segments

time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Vika has an infinite sheet of squared paper. Initially all squares are white. She introduced a two-dimensional coordinate system on this sheet and drew n black horizontal and vertical segments parallel to the coordinate axes. All segments have width equal to 1 square, that means every segment occupy some set of neighbouring squares situated in one row or one column.

Your task is to calculate the number of painted cells. If a cell was painted more than once, it should be calculated exactly once.

Input

The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) — the number of segments drawn by Vika.

Each of the next n lines contains four integers x1, y1, x2 and y2 ( - 109 ≤ x1, y1, x2, y2 ≤ 109) — the coordinates of the endpoints of the segments drawn by Vika. It is guaranteed that all the segments are parallel to coordinate axes. Segments may touch, overlap and even completely coincide.

Output

Print the number of cells painted by Vika. If a cell was painted more than once, it should be calculated exactly once in the answer.

Examples
input
3
0 1 2 1
1 4 1 2
0 3 2 3
output
8
input
4
-2 -1 2 -1
2 1 -2 1
-1 -2 -1 2
1 2 1 -2
output
16
Note

In the first sample Vika will paint squares (0, 1), (1, 1), (2, 1), (1, 2), (1, 3), (1, 4), (0, 3) and (2, 3).

题意:

给了这么多线段,问它们一共包含了多少个点;

思路:

把线段变成宽为1的矩形,然后用扫描线算法求面积;

AC代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+4;
int n,x1,x2,y3,y2,rec[2*N],num;
struct no
{int l,r,h,flag;
};
no line[8*N];
struct nod
{int l,r,cover;ll sum;
};
nod tree[8*N];
int cmp(no x,no y)
{return x.h<y.h;
}
void build(int node,int L,int R)
{tree[node].l=L,tree[node].r=R;tree[node].cover=tree[node].sum=0;if(L>=R)return ;int mid=(L+R)>>1;build(2*node,L,mid);build(2*node+1,mid+1,R);
}
void Pushup(int node)
{if(tree[node].cover){tree[node].sum=rec[tree[node].r+1]-rec[tree[node].l];}else{if(tree[node].l==tree[node].r)tree[node].sum=0;else tree[node].sum=tree[2*node].sum+tree[2*node+1].sum;}
}
void update(int node,int L,int R,int x)
{if(L<=tree[node].l&&R>=tree[node].r){tree[node].cover+=x;Pushup(node);return ;}int mid=(tree[node].l+tree[node].r)>>1;if(L>mid) update(2*node+1,L,R,x);else if(R<=mid)update(2*node,L,R,x);else{update(2*node,L,mid,x);update(2*node+1,mid+1,R,x);}Pushup(node);
}
int bi(int x)
{int L=1,R=num-1,mid;while(L<=R){mid=(L+R)>>1;if(rec[mid]==x)return mid;else if(rec[mid]>x)R=mid-1;else L=mid+1;}return -1;
}
int main()
{scanf("%d",&n);int cnt=1;for(int i=1;i<=n;i++){scanf("%d%d%d%d",&x1,&y3,&x2,&y2);if(x1>x2)swap(x1,x2);if(y3>y2)swap(y3,y2);rec[cnt] = line[cnt].l = x1;line[cnt].r = x2+1;line[cnt].h = y3;line[cnt++].flag = 1;line[cnt].l = x1;rec[cnt] = line[cnt].r = x2+1;line[cnt].h = y2+1;line[cnt++].flag = -1;}sort(line+1,line+cnt,cmp);sort(rec+1,rec+cnt);num = 2;for(int i = 2;i < cnt;i++){if(rec[i]!=rec[i-1])rec[num++]=rec[i];}build(1,1,num-1);ll ans=0;for(int i = 1;i < cnt-1;i++){int fx = bi(line[i].l);int fy = bi(line[i].r)-1;if(fx <= fy){update(1,fx,fy,line[i].flag);}ans+=tree[1].sum*(ll)(line[i+1].h-line[i].h);}cout<<ans<<"\n";return 0;
}

转载于:https://www.cnblogs.com/zhangchengc919/p/5363831.html

相关文章:

ubuntu下安装redis

安装reids服务器 apt-get install redis-server 测试是否安装成功 redis-cli 安装phpredis扩展 #wgethttps://github.com/nicolasff/phpredis/downloads #tar -zxvf nicolasff-phpredis-2.1.3-124-gd4ad907.tar.gz # mv nicolasff-phpredis-d4ad907 php-5.3.8/ext/phpredis/ # …

往往存储与计算机硬盘或其他,硬盘是计算机系统中信息资源最重要的存储设备其所存放信息-Read.DOC...

硬盘是计算机系统中信息资源最重要的存储设备其所存放信息-ReadPAGEPAGE 2摘要关键字&#xff1a;磁盘、硬盘、中断13、扩展中断13、分区表、MBR、DBR、DPT、Boot、CMOS、FAT、柱面、磁道、磁头、扇区随着科学技术的不断发展和社会信息化程度的不断提高&#xff0c;电脑已逐渐深…

【Ghost Blog】如何给Ghost Blog添加背景音乐

昨天闲着无聊&#xff0c;就给自己的电脑装了一个Ghost的博客&#xff0c;打开博客的第一眼就被震撼到了&#xff0c;我们可以发现界面十分的简介。。。。上面的都是废话 我们来看一看我我选择的音乐播放器——网易云音乐&#xff0c;这个播放器就是在一个歌曲上点开之后有一个…

AE 动画直接变原生代码:Airbnb 发布开源动画库 Lottie

原文 Airbnb 发布的 Lottie 是一个面向 iOS、Android 和 React Native 的开源动画库。 简单来说&#xff0c;就是可以直接利用 AE 导出的 JSON 动画文件&#xff0c;将其解析为原生代码&#xff0c;并跨平台运行在设备上。 根据身边朋友的试用&#xff0c;通过 Canvas 绘制动画…

纹理贴图的模式设置

1 要对纹理进行任何的操作&#xff0c;必须先使该纹理问当前的active纹理 glGenTextures( 1, &reflectionTexObj );glBindTexture( GL_TEXTURE_2D, reflectionTexObj );glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );glTexParameteri( GL_TEXTURE_2D, G…

人社局计算机考试报名时间,内蒙古人社局:2016年下半年计算机软件水平考试报名时间通知...

关于做好2016年度下半年计算机技术与软件专业技术资格、翻译专业资格(水平)考试笔译考试报名工作的通知各旗县区人力资源和社会保障局、市直有关单位&#xff1a;根据内蒙古自治区人事考试中心《关于做好2016年度下半年计算机技术与软件专业技术资格(水平)考试报名工作的通知》…

即时通讯下数据粘包、断包处理实例(基于CocoaAsyncSocket)

来源&#xff1a;涂耀辉 www.jianshu.com/p/2e16572c9ddc 如有好文章投稿&#xff0c;请点击 → 这里了解详情 前言 本文旨以实例的方式&#xff0c;使用CocoaAsyncSocket这个框架进行数据封包和拆包。来解决频繁的数据发送下&#xff0c;导致的数据粘包、以及较大数据&#x…

linux下 为自己编写的程序 添加tab自动补全 功能

linux下 为自己编写的程序 添加tab自动补全功能 入门 complete 在我的tmp下随便写了一个a.sh, 为他补全edit /etc/bash_completion.d/foo_foo() {local cur prev optsCOMPREPLY()cur"${COMP_WORDS[COMP_CWORD]}"prev"${COMP_WORDS[COMP_CWORD-1]}"opts&quo…

笔记本电脑(Windows7)实现无线AP

使用环境&#xff1a;出差两个同事住一个房间、网线不够用、没有路由器 1、在windows命令窗口中运行以下命令 netsh wlan set hostednetwork modeallow netsh wlan set hostednetwork ssidOPEN key1234567890 netsh wlan start hostednetwork 命令解释&#xff1a;在笔记本插有…

华北电力大学计算机图形学实验报告,华北电力大学计算机图形学实验报告分析.doc...

华北电力大学计算机图形学实验报告分析科 技 学 院课程设计(综合实验)报告( 2013 -- 2014 年度第 2 学期)实验名称 OpenGL基本图元绘制实验课程名称 计算机图形学||专业班级&#xff1a;计算机11K1 学生姓名&#xff1a;曲强学 号&#xff1a;111909010118 成 绩&#xff1a;指…

Fastlane 入门实战教程从打包到上传iTunes connect

有关神器 Fastlane 持续集成\部署的文章网上挺多,本文定位是入门教程,针对 iOS 应用的持续部署,只需一条命令就可实现从 Xcode 项目到 编译\打包\构建\提交审核 文章稍微有点长,涵盖内容为:fastlane 简介\安装\配置 Snapshot 截图 XCTest 一键上传App Store 说明:本文将 App…

double int char 数据类型

贴心的limits... 测试代码&#xff1a; #include <iostream> #include <stdio.h> #include <limits> #include <math.h> using namespace std;int main() {//double 有效数字16位double test3 1.2345678912345678e17;printf("%.17lf\n", te…

开发工具Drawscript

在Mac App Store上有一款iOS开发工具PaintCode(MAC App Store地址)。它可以通过矢量绘图来绘出你想要生成的用户控件界面&#xff0c;然后由PaintCode来动态生成iOS & OSX绘制代码。这样&#xff0c;你在drawRect函数中就只要粘贴拷贝就能生成自己想要的图案了。奈何&#…

悉尼大学计算机研究生学制,悉尼大学研究生学制

澳大利亚悉尼大学具有丰富的研究生专业课程&#xff0c;学制安排一般在1-2年时间。悉尼大学硕士申请要求要求非211大学申请者&#xff0c;暂不需清华认证 (毕业证、学位证、成绩单)入学要求&#xff1a;工程类专业(Engineering,IT)Master of Professional Engineering985/211学…

2016.04.09 使用Powerdesigner进行创建数据库的概念模型并转为物理模型

2016.04.09 使用Powerdesigner进行创建数据库的概念模型并转为物理模型 2016-04-09 21:10:24 本文原创受版权保护&#xff0c;严禁转载。 请大家不要用于商业用途,支持正版,大家都是做软件的,知道开发一套软件实属不易啊&#xff01; 今天看到了一个很有趣并且很有用的辅助…

ESTabBarController

为什么要使用? 在开发工作中&#xff0c;我们可能会遇到需要自定义UITabBar的情况。例如&#xff1a;改变文字样式、添加一些动画效果、设置一个比默认更大的样式等等&#xff0c;以上需求如果只通过UITabBarItem往往很难实现。 有了ESTabBarController&#xff0c;你可以轻松…

iPhone App开发导航条(Navigation Bar)素材PSD下载

不管是iPhone还是Android的应用App界面基本上最上方都会有个导航条&#xff08;Navigation Bar&#xff09;。于是我决定创建此页面整理收集所有好看的适合在iPhone App应用开发中使用的导航条素材PSD文件&#xff0c;并附有下载链接供需要在自己的iPhone App应用开发中需要使用…

点歌服务器工作原理,KTV点歌系统方案概述

《KTV点歌系统方案概述》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《KTV点歌系统方案概述(7页珍藏版)》请在人人文库网上搜索。1、一)目前点歌系统的主流方式目前&#xff0c;可以实现的KTV系统的点歌方式很多&#xff0c;但是可以主要归类为以下两大方式&#xf…

Xcode快捷键及代码块

2017-02-16 吴白 CocoaChina手指在键盘上飞速跳跃,终端上的代码也随着飞舞,是的这确实很酷。优秀的程序员总是这么一群人&#xff0c;他们不拘于现状&#xff0c;不固步自封&#xff0c;他们喜欢新奇的事&#xff0c;他们把自己发挥到极致。 指法攻略 放下您钟爱的鼠标吧&#…

使用logrotate管理nginx日志文件

本文转载自&#xff1a;http://linux008.blog.51cto.com/2837805/555829 描述&#xff1a;linux日志文件如果不定期清理&#xff0c;会填满整个磁盘。这样会很危险&#xff0c;因此日志管理是系统管理员日常工作之一。我们可以使用"logrotate"来管理linux日志文件&am…

c 异步中断服务器连接,异步连接和断开与epoll(Linux)

我有一个“完整”的答案在这里以防别人正在寻找这样的&#xff1a;#include #include ........int retVal -1;socklen_t retValLen sizeof (retVal);int status connect(socketFD, ...);if (status 0){// OK -- socket is ready for IO}else if (errno EINPROGRESS){struc…

java获取真实ip

在JSP里&#xff0c;获取客户端的IP地址的方法是&#xff1a;request.getRemoteAddr&#xff08;&#xff09;&#xff0c;这种方法在大部分情况下都是有效的。但是在通过了Apache&#xff0c;Squid等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软…

卡片式设计的最佳实践分享

2017-02-17 三达不留点gpj CocoaChina卡片本质上是一个简单的信息容器&#xff0c;信息量有限&#xff0c;但设计干净整洁。现如今&#xff0c;在保证界面具有优秀可用性的同时&#xff0c;卡片式的设计甚至成为了平衡界面美学的默认做法。作为最初由Pinterest和Facebook这样的…

Arduino 各种模块篇 光敏感应器 简易光敏

这一款是非常简单的光敏感应器 简单到&#xff0c;只对一定光强度有信号感应&#xff0c;输出TTL电平。 此款也是用电位器来调节的。 都是这么简单。 过段时间我为大家奉上数字版的光敏传感器。 ————————————————————————分割线———————————…

vb打开服务器excel文件路径,咨询下VB如何打开EXCEL文件并将内容显示在listbox中

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Adodc DataGrid 控件直接连接 Excel 表格&#xff0c; 把 Excel 表格当成数据库。 在窗体中画出 Adodc1 和 DataGrid1 两个控件&#xff0c; 不做任何属性设置&#xff0c;只管大小和位置。 ------------------------------…

iOS动画进阶 - 手摸手教你写ShineButton动画

移动端访问不佳&#xff0c;请访问我的个人博客 前段时间在github上看见一个非常nice的动画效果&#xff0c;可惜是安卓的&#xff0c;想着用Swift写一个iOS版的&#xff0c;下下来源代码研究了一下&#xff0c;下面是我写代码的心路历程 先上图和demo的地址 分析动画过程 刚开…

redis自动过期

我当时设置如登陆自动过期的时间。自己找的做了下。 设置自动过期时间。 public static PooledRedisClientManager poolreds; static RedisPool() { try { poolreds new PooledRedisClientManager(10, new string[] { “101210.212.&#xff1a;1213” }); } catch (Exception…

Java中使用LUA脚本语言

Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学&#xff08;Pontifical Catholic University of Rio de Janeiro&#xff09;里的一个研究小组&#xff0c;由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。简单介绍可详…

电脑显示服务器地址无法ping通,网关无法Ping通故障及解决方法

很多网络故障是常见问题&#xff0c;一般的三板斧方法就能解决问题&#xff0c;但有些故障容易让我们多走弯路&#xff0c;我们不妨拓宽故障排查范围&#xff0c;换换思路。在与网络亲密接触的过程中&#xff0c;我们或多或少地会遇到一些网络故障&#xff0c;对于许多网络故障…

VVeboTableView 源码解析

原文链接&#xff1a;http://www.jianshu.com/p/78027a3a2c41最近在看一些 iOS 性能优化的文章&#xff0c;我找到了 VVeboTableView 这个框架。严格来说这个不属于框架&#xff0c;而是作者用自己的方式优化 UITableView 的一个实践。 VVeboTableView 展示了各种类型的 cell&a…