P1856 [USACO5.5]矩形周长Picture

题目背景

墙上贴着许多形状相同的海报、照片。它们的边都是水平和垂直的。每个矩形图片可能部分或全部的覆盖了其他图片。所有矩形合并后的边长称为周长。

题目描述

编写一个程序计算周长。

如图1所示7个矩形。

如图2所示,所有矩形的边界。所有矩形顶点的坐标都是整数。

输入输出格式

输入格式:

输入文件的第一行是一个整数N(0<=N<5000),表示有多少个矩形。接下来N行给出了每一个矩形左下角坐标和右上角坐标(所有坐标的数值范围都在-10000到10000之间)。

输出格式:

输出文件只有一个正整数,表示所有矩形的周长。

输入输出样例

输入样例#1:

7
-15 0 5 10
-5 8 20 25
15 -4 24 14
0 -6 16 4
2 15 10 22
30 10 36 20
34 0 40 16
输出样例#1:

228

求周长和,不用离散的方法

记录最小值和最小值出现的个数

#include <cstdio>
#include <algorithm>
using namespace std;
#define N 10005
int n,x1[N],y1[N],x2[N],y2[N];
struct node{int x1,x2,y,op;}line[N];
inline bool cmp(node a,node b){return a.y!=b.y?a.y<b.y:a.op>b.op;}
struct SegmentTree{int l,r,mi,sum,lazy;}Tree[N<<];
inline void pushup(int x)
{
if(Tree[x<<].mi==Tree[x<<|].mi)Tree[x].sum=Tree[x<<].sum+Tree[x<<|].sum, Tree[x].mi=Tree[x<<].mi;
else if(Tree[x<<].mi<Tree[x<<|].mi)Tree[x].sum=Tree[x<<].sum, Tree[x].mi=Tree[x<<].mi;
else Tree[x].sum=Tree[x<<|].sum, Tree[x].mi=Tree[x<<|].mi;
}
inline void ADD(int x,int v){Tree[x].lazy+=v;Tree[x].mi+=v;}
inline void pushdown(int x){ADD(x<<,Tree[x].lazy); ADD(x<<|,Tree[x].lazy); Tree[x].lazy=;}
inline void build(int l,int r,int x)
{
Tree[x].l=l; Tree[x].r=r; Tree[x].lazy=;
if(l==r){Tree[x].sum=;Tree[x].mi=;return;}
int mid=(l+r)>>;build(l,mid,x<<);build(mid+,r,x<<|);pushup(x);
}
inline void updata(int l,int r,int x,int v)
{
if(l==Tree[x].l&&Tree[x].r==r){Tree[x].lazy+=v;Tree[x].mi+=v;return;}
if(Tree[x].lazy!=) pushdown(x); int mid=(Tree[x].l+Tree[x].r)>>;
if(r<=mid)updata(l,r,x<<,v); else if(l>mid) updata(l,r,x<<|,v);
else updata(l,mid,x<<,v), updata(mid+,r,x<<|,v); pushup(x);
}
int main()
{
int i,ans=; scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%d%d%d%d",&x1[i],&y1[i],&x2[i],&y2[i]);
line[i*-].x1=line[i*].x1=x1[i]; line[i*-].x2=line[i*].x2=x2[i]-;
line[i*-].y=y1[i]; line[i*].y=y2[i]; line[i*-].op=; line[i*].op=-;
}n*=;
sort(line+,line+n+,cmp); build(-N,N,);
for(i=;i<=n;i++)
{
int oo=Tree[].sum*(Tree[].mi==); updata(line[i].x1,line[i].x2,,line[i].op); ans+=abs(oo-Tree[].sum*(Tree[].mi==));
}
for(i=;i<=n;i++)
{
line[i*-].x1=line[i*].x1=y1[i]; line[i*-].x2=line[i*].x2=y2[i]-;
line[i*-].y=x1[i]; line[i*].y=x2[i]; line[i*-].op=; line[i*].op=-;
}
sort(line+,line+n+,cmp); build(-N,N,);
for(i=;i<=n;i++)
{
int oo=Tree[].sum*(Tree[].mi==); updata(line[i].x1,line[i].x2,,line[i].op); ans+=abs(oo-Tree[].sum*(Tree[].mi==));
}
printf("%d\n",ans);
}

luogu1856的更多相关文章

  1. luogu1856 [USACO5.5]矩形周长Picture

    看到一坨矩形就要想到扫描线.(poj atantis) 我们把横边竖边分开计算,因为横边竖边其实没有区别,以下论述全为考虑竖边的. 怎样统计一个竖边对答案的贡献呢?答:把这个竖边加入线段树,当前的总覆 ...

  2. Luogu1856 [USACO5.5]矩形周长Picture (线段树扫描线)

    对于横轴,加上与上一次扫描的差值:对于竖轴,加上高度差与区间内不相交线段\(*2\)的积: 难点在pushdown,注意维护覆盖关系.再就注意负数 #include <iostream> ...

随机推荐

  1. Multi-View Region Adaptive Multi-temporal DMM and RGB Action Recognition

    论文标题:Multi-View Region Adaptive Multi-temporal DMM and RGB Action Recognition 来源/作者机构情况: 解决问题/主要思想贡献 ...

  2. FreeRTOS的任务非运行态

    当FreeRTOS启动任务调度器以后,任务调度器会在心跳中断函数中确定下一个要运行的任务,如果任务调度器仅仅依靠任务优先级来判断该运行哪个任务,这样会造成低优先级的任务根本没法运行,因为FreeRTO ...

  3. QWidget设置背景颜色

    如果widget是子窗口首先要添加一句: this->setAttribute(Qt::WA_StyledBackground,true); this->setStyleSheet(&qu ...

  4. 2-(基础入门篇)Air202下载开发入门(给Air202下载第一个程序)

    http://www.cnblogs.com/yangfengwu/p/8887933.html 资料链接 链接:https://pan.baidu.com/s/1-SRfsKGQ7rZVvFmp1O ...

  5. GIT 分支管理:多人协作

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git r ...

  6. 在lua中创建字段安全的对象

    lua萌新,刚刚学习和使用不到一个月.有不对的地方,还望各路大神不吝赐教. lua中可以用table来模拟对象,但table是可以任意增加键值的.在对象模拟中,暂且也叫它为字段(field)吧.如果在 ...

  7. LiveCharts文档-3开始-8自定义工具提示

    原文:LiveCharts文档-3开始-8自定义工具提示 LiveCharts文档-3开始-8自定义工具提示 默认每个需要tooltip或者legend的chart都会初始化一个DefaultLeng ...

  8. Solr数据库导入

    Solr数据库导入 1.在MySQL中创建一张表t_solr,并插入测试数据. 2.把E:\Solr\solr-4.10.4\example\example-DIH\solr\db\conf下的adm ...

  9. 数组排列组合问题——BACKTRACKING

    BACKTRACKING backtracking(回溯法)是一类递归算法,通常用于解决某类问题:要求找出答案空间中符合某种特定要求的答案,比如eight queens puzzle(将国际象棋的八个 ...

  10. 【JVM.5】类文件结构

    鲁迅曾经说过:代码编译的结构从本地机器码转变为字节码,是存储格式发展的一小步,确是编程语言发展的一大步. 一.无关性的基石 Java设计者在最初就承诺过“In the future, we will ...