#include <cstdio>
#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <math.h>
#include <stack>
#define INF 0x3f3f3f3f
#define IMAX 2147483646
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
using namespace std;
const int maxn = 20006;
struct T {
int sum, num, len;
bool l, r;
}t[maxn * 4];
void work(int p, int l, int r) {
if (t[p].sum) {
t[p].num = t[p].l = t[p].r = 1;
t[p].len = r - l + 1;
}
else if (l == r)
t[p].len = t[p].num = t[p].l = t[p].r = 0;
else {
t[p].len = t[p << 1].len + t[p << 1 | 1].len;
t[p].num = t[p << 1].num + t[p << 1 | 1].num;
if (t[p << 1].r&&t[p << 1 | 1].l) --t[p].num;
t[p].l = t[p << 1].l;
t[p].r = t[p << 1 | 1].r;
}
}
void change(int p, int l, int r, int L, int R, int k) {
if (l >= L && r <= R) {
t[p].sum += k;
work(p, l, r);
return;
}
int mid = (l + r) >> 1;
if (L <= mid)change(p << 1, l, mid, L, R, k);
if (R > mid)change(p << 1 | 1, mid + 1, r, L, R, k);
work(p, l, r);
}
int n, maxx = -INF, minn = INF, tot, ans, pre;
struct P {
int l, r, h, k;
bool operator<(const P& p)const {
return h < p.h || (h == p.h&&k > p.k);
}
}a[maxn];
void add(int l, int r, int h, int k) {
a[++tot].l = l;
a[tot].r = r;
a[tot].h = h;
a[tot].k = k;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
maxx = max(maxx, max(x2, x1));
minn = min(minn, min(x1, x2));
add(x1, x2, y1, 1);
add(x1, x2, y2, -1);
}
if (minn <= 0) {
for (int i = 1; i <= tot; i++) {
a[i].l += 1 - minn;
a[i].r += 1 - minn;
}
maxx -= minn;
}
sort(a + 1, a + 1 + tot);
for (int i = 1; i <= tot; i++) {
change(1, 1, maxx, a[i].l, a[i].r - 1, a[i].k);
while (a[i].h == a[i + 1].h &&a[i].k == a[i + 1].k) {
i++; change(1, 1, maxx, a[i].l, a[i].r - 1, a[i].k);
}
ans += abs(t[1].len - pre);
pre = t[1].len;
ans += t[1].num*(a[i + 1].h - a[i].h) << 1;
}
printf("%d\n", ans);
return 0;
}
相关推荐
Unity 2D精灵点击交互实现:从BoxCollider 2D到Event Trigger的完整指南
本文提供了Unity 2D精灵点击交互的完整实现指南。通过详细拆解BoxCollider 2D与Event Trigger两大核心组件的协同工作原理,手把手教你为Sprite Renderer添加点击、悬停等事件响应。文章包含从基础配置到进阶优化、性能调试的实战步骤,帮助开发者高效实现游戏世界内的对象交互,是Unity 2D开发的实用教程。
[Java] POJ - 1177 线段树 + 扫描线(周长并)
一、内容 Picture A number of rectangular posters, photographs and other pictures of the same shape are pasted on a wall. Their sides are all vertical or horizontal. Each rectangle can be partially or tota...
STM32F030F4P6实战:LL库+DMA驱动WS2812全流程(附避坑指南)
本文详细介绍了如何使用STM32F030F4P6的LL库和DMA驱动WS2812 LED灯带的全流程,包括硬件选型、CubeMX配置、LL库与DMA关键实现、数据格式转换及调试技巧。特别提供了避坑指南,帮助开发者避免常见错误,提升开发效率。
线段树-poj1177-N个矩形求边长(离散化+扫描线)
[code="java"]package com.ljn.base; import java.util.Arrays; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; /** * POJ 1177 (线段树+离散化+扫描线),题目链接为http://poj.org/pro...
小案例:利用图床自动化批量上传图片并获取图片链接
用python爬虫写了一个小脚本,用来自动上传图片到图床,然后返回链接,我们只需直接复制链接就可以。(需要安装Requests库) 因为不同图床需要提交的POST表单不一致,所以在这里我用ImgURL图床做示范,如果大家有需求,可自行修改代码。使用脚本的时候,我们只需把需要上传的图片和这个脚本放在同一个文件夹中,然后运行脚本,稍作等待,看到提示时就可以在脚本运行文件夹中发现一个名为“图片链接地址.txt”的文件,里面就是图片链接啦! 四、图片链接地址.txt(单张图片):...
从零开始掌握OBD-II:汽车诊断开发的核心技术与实战解析
本文深入解析OBD-II汽车诊断系统的核心技术,包括ECU通信协议、故障码解析及诊断工具开发实战。通过详细的协议分析和代码示例,帮助开发者快速掌握汽车诊断开发技能,实现从零到精通的进阶。特别适合从事汽车电子开发和OBD检测的技术人员参考学习。
POJ 1177(扫描线 轮廓线)
题目链接:http://poj.org/problem?id=1177 题目大意:求多个矩形重合后的周长和 题目思路:从上到下来一遍扫描线,从左到右来一遍扫描线。然后每次更新线段树后整体解与之前的结果相减取绝对值就是新的周长。可以画图理解。 以下是代码: #include<iostream> #include<cstdio> #include&l...
深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系
训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration
POJ 1177 Picture 矩形周长并
题意很简单,但是周长并比面积并又稍微麻烦了一些 这时候要开一个numseg存储竖边的个数。 再开lbd,rbd分别表示边界,这样是为了帮助删除重合的边 /* ID: sdj22251 PROG: subset LANG: C++ */ #include <iostream> #include <vector> #include <list> #in...
【Android Performance】Android CPU调度模式详解:从performance到schedutil的Governor调优指南
本文系统讲解Android/Linux系统中的CPU频率调节策略(Governor),涵盖六大调度模式的底层工作原理:performance(性能优先)、powersave(省电优先)、conservative(保守调频)、ondemand(按需调频)、userspace(手动控制)以及schedutil(调度器驱动)。文中深入拆解每种Governor的调频决策逻辑、上升/下降曲线的差异、适用场景与选型建议,并配以实操命令演示如何查看可用Governor列表、动态切换调度模式以及多Cluster架构下的统一
Windows环境下Ollama的本地部署方案
本文主要介绍了Windows环境下Ollama的本地部署方案,希望对使用大语言模型的同学们有所帮助。 文章目录 1. 前言 2. Windows环境安装 3. API调用示例代码
N - Picture POJ - 1177(矩形周长并 + 线段树 + 离散化)
A number of rectangular posters, photographs and other pictures of the same shape are pasted on a wall. Their sides are all vertical or horizontal. Each rectangle can be partially or totally covered b...
计算机组成原理(第三版)唐朔飞-第七章指令系统-课后习题
机器字长是指CPU一次能处理数据的位数通常与CPU的寄存器位数有关。指令字长是指机器指令中二进制代码的总位数。存储字长是指存储单元中存放二进制代码的总位数。三者可以相等也可以不等视不同机器而定。答:OP(4位)A1(6位)A_1(6位)A1(6位)A2(6位)A_2(6位)A2(6位)设二地址指令格式为该指令系统的基本格式,4位操作码共有16种编码,其中13种用来定义二地址指令,还剩3种可用作扩展标志。一地址指令条数=3∗26=192。
poj1177
/*********************************poj 1177 求矩形并的周长水平和竖直各扫描一次!采用计算几何上讲的方法,WA了老半天,于是决定用下面这种x轴和y轴各扫描一次的方法。虽然慢了点,但终于过了!*********************************/ #include #include #include #include usin
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
POJ - 1177 线段树
POJ - 1177 扫描线 这道题也算是一道扫描线的经典题目了。 只不过这道题是算周长,非常有意思的一道题。我们已经知道了,一般求面积并,是如何求的,现在我们要把扫描线进行改造一下,使得能算周长。 我们大致考虑一下图像上是如何实现的: 这样一个图我们要如何求他的面积? 我们把轮廓画出来 我们把扫描线画出来 我们发现 从上到下我们竖直方...
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
POJ 1177 Picture
POJ_1177 这个题目和POJ_1151基本思路是一样的,一些具体的思路可以参考我的那篇题解:http://www.cnblogs.com/staginner/archive/2012/02/20/2359396.html。 相比算面积不同的是,每次计算面积的操作需要改为计算周长的操作,同时周长可以分成平行于x轴的部分和平行y轴的部分分开来求。 #include<...
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
POJ 1177 Picture(矩形并的周长)
题目链接: POJ 1177 Picture//926K 16MS #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #define lson(x) (x<<1) #define rson(x) ((x<<1)|1) us
POJ - 1177 Picture (线段树 + 扫描线)
POJ - 1177 题目 题意: 给一堆矩形,求这些矩形的周长 #include #include #include #include #include using namespace std; #define met(a,b) memset(a,b,sizeof(a)) const int maxn = 5010; struct node { int x,v,y1
poj 1177 Picture
http://poj.org/problem?id=1177 经典线段树,求矩形并的周长。把坐标排个序,然后插入线段树,求其变化的和就可以了。轻松1y~ View Code 1 #include <cstdio> 2 #include <algorithm> 3 #include <vector> 4 5 using...
POJ 1177 Picture 线段树+扫描线
题目链接:POJ 1177 Picture 题目 Description A number of rectangular posters, photographs and other pictures of the same shape are pasted on a wall. Their sides are all vertical or horizontal. Each rectangle...
POJ 1177 扫描线法
题意 传送门 POJ 1177 Picture 题解 求矩形面积并的周长。扫描线法求解,将矩形用 (x1,y1,y2,1),(x2,y1,y2,−1)(x_1,y_1,y_2,1),(x_2,y_1,y_2,-1)(x1,y1,y2,1),(x2,y1,y2,−1) 表示,顺序扫描 xxx 轴,同时维护离散化的 yyy 轴各区域被覆盖的矩形面积数。周长中平行于 xxx 轴的部分,为各扫描线间距离乘以矩形与未覆盖区域的边界数之和;平行于 yyy 轴的部分,为各扫描线间出现矩形与未覆盖区域交界的长度
【转】POJ 1177 Picture(1)
POJ_1177 这个题目和POJ_1151基本思路是一样的,一些具体的思路可以参考我的那篇题解:http://www.cnblogs.com/staginner/archive/2012/02/20/2359396.html。 相比算面积不同的是,每次计算面积的操作需要改为计算周长的操作,同时周长可以分成平行于x轴的部分和平行y轴的部分分开来求。 #include<...
POJ 1177 Picture (线段树+离散化+扫描线) 详解
转自:http://www.cnblogs.com/shuaiwhu/archive/2012/04/22/2464876.html POJ 1177 (线段树+离散化+扫描线),题目链接为http://poj.org/problem?id=1177 在做本题之前,必须先了解什么是线段树和离散化,请看前一篇博文线段树(segment tree),里面对线段树和离散化的说明相对比较清楚了。
301



被折叠的 条评论
为什么被折叠?



