poj 1177

POJ-1177 Picture(线段树+扫描线) 链接:POJ-1177 Picture 题意 给出平面直角坐标系上nnn(0≤n≤50000\le n\le 50000≤n≤5000)个矩形,求所有矩形合并后的所有线段长度之和。 分析 以计算 水平线段(平行于xxx轴)的长度之和 为例,竖直扫描线(平行于yyy轴)水平扫过 各矩形的 左、右边界; 可以发现,每扫过单位水平长度,水平线段长度之和应当增加 当前竖直方向的线段数目∗2*2∗2; ... 阅读详情
#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;
}
百度贴吧爬虫实战:完整实现与使用指南 使用 csv 模块创建写入器,首先写入表头("标题" 和 "链接"),然后遍历帖子字典,将每个标题和链接作为一行写入文件。首先检查内容是否为空,然后通过查找 JSON 结构的起始({)和结束(})位置,提取有效的 JSON 片段。接着遍历帖子列表中的每个条目,提取标题文本和对应的链接,对于相对路径的链接会自动补全为完整的 URL。从 JSON 提取标题和链接此方法专门用于从解析后的 JSON 数据中提取帖子标题和对应的链接。提取到的标题和链接以字典形式返回,键为标题,值为对应的完整链接。 阅读详情

相关推荐

Unity 2D精灵点击交互实现:从BoxCollider 2D到Event Trigger的完整指南

本文提供了Unity 2D精灵点击交互的完整实现指南。通过详细拆解BoxCollider 2D与Event Trigger两大核心组件的协同工作原理,手把手教你为Sprite Renderer添加点击、悬停等事件响应。文章包含从基础配置到进阶优化、性能调试的实战步骤,帮助开发者高效实现游戏世界内的对象交互,是Unity 2D开发的实用教程。

ansible6ops的博客 301

[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...

Tizzi的博客 610

STM32F030F4P6实战:LL库+DMA驱动WS2812全流程(附避坑指南)

本文详细介绍了如何使用STM32F030F4P6的LL库和DMA驱动WS2812 LED灯带的全流程,包括硬件选型、CubeMX配置、LL库与DMA关键实现、数据格式转换及调试技巧。特别提供了避坑指南,帮助开发者避免常见错误,提升开发效率。

weixin_29194693的博客 484

线段树-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...

代码说-Let code talk 266

小案例:利用图床自动化批量上传图片并获取图片链接

用python爬虫写了一个小脚本,用来自动上传图片到图床,然后返回链接,我们只需直接复制链接就可以。(需要安装Requests库) 因为不同图床需要提交的POST表单不一致,所以在这里我用ImgURL图床做示范,如果大家有需求,可自行修改代码。使用脚本的时候,我们只需把需要上传的图片和这个脚本放在同一个文件夹中,然后运行脚本,稍作等待,看到提示时就可以在脚本运行文件夹中发现一个名为“图片链接地址.txt”的文件,里面就是图片链接啦! 四、图片链接地址.txt(单张图片):...

采菊东篱下,Python满乾坤! 4409

从零开始掌握OBD-II:汽车诊断开发的核心技术与实战解析

本文深入解析OBD-II汽车诊断系统的核心技术,包括ECU通信协议、故障码解析及诊断工具开发实战。通过详细的协议分析和代码示例,帮助开发者快速掌握汽车诊断开发技能,实现从零到精通的进阶。特别适合从事汽车电子开发和OBD检测的技术人员参考学习。

weixin_42528780的博客 438

POJ 1177(扫描线 轮廓线)

题目链接:http://poj.org/problem?id=1177   题目大意:求多个矩形重合后的周长和   题目思路:从上到下来一遍扫描线,从左到右来一遍扫描线。然后每次更新线段树后整体解与之前的结果相减取绝对值就是新的周长。可以画图理解。   以下是代码: #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&l...

smilestruggler_Fly To Higher 374

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration

qq_42740834的博客 1610

POJ 1177 Picture 矩形周长并

题意很简单,但是周长并比面积并又稍微麻烦了一些 这时候要开一个numseg存储竖边的个数。 再开lbd,rbd分别表示边界,这样是为了帮助删除重合的边 /* ID: sdj22251 PROG: subset LANG: C++ */ #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;list&gt; #in...

java开发指南博客 【转载】 145

【Android Performance】Android CPU调度模式详解:从performance到schedutil的Governor调优指南

本文系统讲解Android/Linux系统中的CPU频率调节策略(Governor),涵盖六大调度模式的底层工作原理:performance(性能优先)、powersave(省电优先)、conservative(保守调频)、ondemand(按需调频)、userspace(手动控制)以及schedutil(调度器驱动)。文中深入拆解每种Governor的调频决策逻辑、上升/下降曲线的差异、适用场景与选型建议,并配以实操命令演示如何查看可用Governor列表、动态切换调度模式以及多Cluster架构下的统一

weixin_44081096的博客 431

Windows环境下Ollama的本地部署方案

本文主要介绍了Windows环境下Ollama的本地部署方案,希望对使用大语言模型的同学们有所帮助。 文章目录 1. 前言 2. Windows环境安装 3. API调用示例代码

herosunly的博客 11万+

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...

日月 434

计算机组成原理(第三版)唐朔飞-第七章指令系统-课后习题

机器字长是指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。

weixin_45735391的博客 7万+

poj1177

/*********************************poj  1177    求矩形并的周长水平和竖直各扫描一次!采用计算几何上讲的方法,WA了老半天,于是决定用下面这种x轴和y轴各扫描一次的方法。虽然慢了点,但终于过了!*********************************/ #include #include #include #include usin

xiaowuRJ的专栏 851

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

POJ - 1177 线段树

POJ - 1177 扫描线 这道题也算是一道扫描线的经典题目了。 只不过这道题是算周长,非常有意思的一道题。我们已经知道了,一般求面积并,是如何求的,现在我们要把扫描线进行改造一下,使得能算周长。 我们大致考虑一下图像上是如何实现的: 这样一个图我们要如何求他的面积? 我们把轮廓画出来 我们把扫描线画出来 我们发现 从上到下我们竖直方...

112

精雕软件(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&lt...

weixin_33978044的博客 84

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

ramay7 551

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

shinimashzi 429

poj 1177 Picture

http://poj.org/problem?id=1177   经典线段树,求矩形并的周长。把坐标排个序,然后插入线段树,求其变化的和就可以了。轻松1y~ View Code 1 #include <cstdio> 2 #include <algorithm> 3 #include <vector> 4 5 using...

weixin_30614587的博客 115

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...

weixin_44273380的博客 364

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 轴的部分,为各扫描线间出现矩形与未覆盖区域交界的长度

neweryyy的博客 275

【转】POJ 1177 Picture(1)

POJ_1177 这个题目和POJ_1151基本思路是一样的,一些具体的思路可以参考我的那篇题解:http://www.cnblogs.com/staginner/archive/2012/02/20/2359396.html。 相比算面积不同的是,每次计算面积的操作需要改为计算周长的操作,同时周长可以分成平行于x轴的部分和平行y轴的部分分开来求。 #include&lt...

weixin_33835103的博客 80

POJ 1177 Picture (线段树+离散化+扫描线) 详解

转自:http://www.cnblogs.com/shuaiwhu/archive/2012/04/22/2464876.html POJ 1177 (线段树+离散化+扫描线),题目链接为http://poj.org/problem?id=1177 在做本题之前,必须先了解什么是线段树和离散化,请看前一篇博文线段树(segment tree),里面对线段树和离散化的说明相对比较清楚了。

wuxinliulei的专栏 1469
上一篇: poj 3667
下一篇: bzoj 3674
FawkesLi
博客等级 码龄8年 21粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值