当前位置: 首页 > news >正文

PA2019 Terytoria

洛谷P5987 [PA2019] Terytoria

题目大意

在一个平面直角坐标系上,有一个长度为 X X X,宽度为 Y Y Y的地图,这个地图的左边界和右边界是连通的,下边界和上边界也是连通的。

在地图中,有 X × Y X\times Y X×Y个格子以及 n n n个矩形,这些矩形的边与坐标轴平行。你只知道每个矩形两个对顶点的坐标,求被所有矩形覆盖住的格子数量的最大值?

1 ≤ n ≤ 5 × 1 0 5 , 2 ≤ X , Y ≤ 1 0 9 1\leq n\leq 5\times 10^5,2\leq X,Y\leq 10^9 1n5×105,2X,Y109


题解

因为每个矩形在横坐标上是取两边或中间,在纵坐标上也是取两边或中间,所以横坐标和纵坐标是不相关的。我们把这些矩形分成映射在 x x x轴的线段和映射在 y y y轴的线段,则最终的答案为 x x x轴上能被所有线段覆盖的最大长度 × y \times y ×y轴上能被所有线段覆盖的最大长度。那么,我们就可以将横坐标和纵坐标分开来做。

对横纵坐标进行离散化,对于离散化后的两个相邻的离散点连成的线段。那么,每种线段只有唯一的取法(取中间或者两边)才能覆盖这条由两个离散点连成的线段。我们用 01 01 01状态来表示每个矩形的覆盖情况( 0 0 0表示取两边, 1 1 1表示取中间),状态可以用哈希和差分来维护,然后用哈希表来存储对应状态的长度,边维护边取最大值。

时间复杂度为 O ( n log ⁡ n + P ) O(n\log n+P) O(nlogn+P),其中 P P P为哈希表的大小。

code

#include<bits/stdc++.h>
using namespace std;
const int N=500000,P=19260817,base=7;
const long long mod1=998244353,mod2=1e9+7;
int n,X,Y,tot=0,l[2*N+5],r[P+5],hv[2*N+5],w1[2*N+5],w2[2*N+5];
long long re,ans=0,pw1[N+5],pw2[N+5];
struct node{int x,w,id;
}x[2*N+5],y[2*N+5];
bool cmp(node ax,node bx){return ax.x<bx.x;
}
void add(int x,int h1,int h2,int vt){l[++tot]=r[x];w1[tot]=h1;w2[tot]=h2;hv[tot]=vt;r[x]=tot;
}
void pl(int h1,int h2,int vt){int u=h1%P;for(int i=r[u];i;i=l[i]){if(w1[i]==h1&&w2[i]==h2){hv[i]+=vt;re=max(re,1ll*hv[i]);return;}}add(u,h1,h2,vt);re=max(re,1ll*vt);
}
long long solve(node *a,int mx){memset(r,0,sizeof(r));re=0;tot=0;long long h1=0,h2=0;pl(0,0,a[1].x);for(int i=1;i<2*n;i++){h1=(h1+pw1[a[i].id]*a[i].w+mod1)%mod1;h2=(h2+pw2[a[i].id]*a[i].w+mod2)%mod2;pl(h1,h2,a[i+1].x-a[i].x);}pl(0,0,mx-a[2*n].x);return re;
}
int main()
{
//	freopen("globe.in","r",stdin);
//	freopen("globe.out","w",stdout);scanf("%d%d%d",&n,&X,&Y);for(int i=1,dx,dy,ux,uy;i<=n;i++){scanf("%d%d%d%d",&dx,&dy,&ux,&uy);if(dx>ux) swap(dx,ux);if(dy>uy) swap(dy,uy);x[i*2-1]=(node){dx,1,i};x[i*2]=(node){ux,-1,i};y[i*2-1]=(node){dy,1,i};y[i*2]=(node){uy,-1,i};}sort(x+1,x+2*n+1,cmp);sort(y+1,y+2*n+1,cmp);pw1[0]=pw2[0]=1;for(int i=1;i<=N;i++){pw1[i]=pw1[i-1]*base%mod1;pw2[i]=pw2[i-1]*base%mod2;}ans=solve(x,X)*solve(y,Y);printf("%lld",ans);return 0;
}

相关文章:

PA2019 Terytoria

洛谷P5987 [PA2019] Terytoria 题目大意 在一个平面直角坐标系上&#xff0c;有一个长度为 X X X&#xff0c;宽度为 Y Y Y的地图&#xff0c;这个地图的左边界和右边界是连通的&#xff0c;下边界和上边界也是连通的。 在地图中&#xff0c;有 X Y X\times Y XY个格子以及…...

内容分发网络CDN分布式部署真的可以加速吗?原理是什么?

Cdn快不快&#xff1f;她为什么会快&#xff1f;同样的带宽为什么她会快&#xff1f;原理究竟是什么&#xff0c;同学们本着普及知识的想法&#xff0c;我了解的不是很深入&#xff0c;适合小白来看我的帖子&#xff0c;如果您是大佬还请您指正错误的地方&#xff0c;先谢谢大佬…...

微服务docker部署实战

docker基础和进阶(*已掌握的可以跳过 *) 基础 docker基础 进阶 docker进阶 准备工作 提前准备好mysql和redis的配置&#xff0c;如下 在/zzq/mysql/conf目录下配置mysql配置文件my.cnf [client] #设置客户端字符集 default_character_setutf8 [mysqld] #开启定时任务 event_s…...

js实现拖拽功能

基于onMouseDown 、onMouseMove 、onMouseUp 使用 mousedown、mousemove 和 mouseup 事件来实现拖拽的基本思路是&#xff1a; 在 mousedown 事件中&#xff0c;开始追踪拖拽操作并记录鼠标按下的位置。 在 mousemove 事件中&#xff0c;根据鼠标的移动&#xff0c;更新被拖拽…...

数据库主从切换过程中Druid没法获取连接错误

背景&#xff1a; 今天dba在进行DB的主从切换&#xff0c;导致应用一直报错&#xff0c;获取不到DB连接&#xff0c;druid的错误信息如下&#xff1a; Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutExc…...

【iOS】Mac M1安装iPhone及iPad的app时设置问题

【iOS】Mac M1安装iPhone及iPad的app时设置问题 简介一&#xff0c;设置问题二&#xff0c;适配问题 简介 由于 苹果M1芯片的Mac可用安装iPhone以及iPad应用&#xff0c;因为开发者并没有适配Mac&#xff0c;因此产生了很多奇怪问题&#xff0c;这里总结归纳Mac M1安装iPhone和…...

Springboot 启动报错@spring.active@解析错误

Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character that cannot start any token. (Do not use for indentation)in reader, line 10, column 13:active: spring.active^查看是否勾选...

【算法挨揍日记】day15——560. 和为 K 的子数组、974. 和可被 K 整除的子数组

560. 和为 K 的子数组 560. 和为 K 的子数组 题目描述&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 子数组是数组中元素的连续非空序列。 解题思路&#xff1a; 我们可以很容易想到暴力解法&#xf…...

数字时代的探索与革新:Socks5代理的引领作用

在当今快速发展的数字时代&#xff0c;技术创新推动着社会的变革与进步。Socks5代理作为一项重要的网络技术&#xff0c;正引领着跨界电商、爬虫数据分析、企业全球化和游戏体验优化等领域的发展。本文将深入探讨Socks5代理技术在这些领域中的引领作用&#xff0c;以及它如何塑…...

算法-堆/归并排序-排序链表

算法-堆/归并排序-排序链表 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/sort-list/description/?envTypestudy-plan-v2&envIdtop-interview-150 1.2 题目描述 2 优先级队列构建大顶堆 2.1 思路 优先级队列构建小顶堆链表所有元素放入小顶堆依次取出堆顶…...

word 如何编写4x4矩阵

百度上给的教程&#xff0c;打印出来没有对齐 https://jingyan.baidu.com/article/6b182309995f8dba58e159fc.html 百度上的方式试了一下&#xff0c;不会对齐。导致公式看起来很奇怪。 下面方式会自动对齐 摸索了一下发现可以用下面这种方式编写 4x4 矩阵。先创建一个 3x3…...

INTELlij IDEA编辑VUE项目

菜单中选择setting–>Plugins 或者快捷键 ctrlalts 搜索vue&#xff0c;但有些情况会搜索不出来&#xff0c;先说搜索到的情况 如下图所示&#xff1a; 如果没有vue.js则说明过去已经安装了。 搜索到了后点击Install安装即可&#xff0c; 但即使搜索成功了&#xff0c;也不…...

linux进程间通讯--信号量

1.认识信号量 方便理解&#xff1a;信号量就是一个计数器。当它大于0能用&#xff0c;小于等于0&#xff0c;用不了&#xff0c;这个值自己给。 2.特点&#xff1a; 信号量用于进程间同步&#xff0c;若要在进程间传递数据需要结合共享内存。信号量基于操作系统的 PV 操作&am…...

VS Code连接远程Linux服务器开发c++项目

1.在远程 Linux 上安装包 yum groupinstall "development tools" -y yum install cmake -y2.在 VSCode 上安装插件 C/CC/C Extension PackCMakeCMake ToolsCMake Language Support 3.连接远程Linux服务器...

stable diffusion的模型选择,采样器选择,关键词

一、Stable Diffusion的模型选择&#xff1a; 模型下载地址&#xff1a;https://civitai.com/&#xff0c;需要科学上网。 Deliberate&#xff1a;全能模型&#xff0c;prompt越详细生成的图片质量越好Realistic Vision&#xff1a;现实模型&#xff0c;生成仿真式图片&#…...

BI零售数据分析:以自身视角展开分析

随着零售业务不断扩展&#xff0c;市场竞争不断加剧&#xff0c;各层级的销售管理人员都急需一张能快速查看销售数据分析报表&#xff0c;能从中知道自己管辖内的业务最近或过去的情况&#xff0c;并依次为依据科学优化销售管理措施。这就要求零售数据分析报表信息足够多、数据…...

Maven 使用教程(三)

一、如何使用外部依赖项&#xff1f; 您可能已经注意到POM中的一个dependencies元素&#xff0c;我们一直在使用它作为示例。事实上&#xff0c;您一直在使用外部依赖项&#xff0c;但在这里我们将更详细地讨论它是如何工作的。有关更全面的介绍&#xff0c;请参阅我们的依赖机…...

行秋找工作的记录

2023-10-17 15:35-16:00 中移&#xff08;苏州&#xff09;研发中心面试 问了项目&#xff0c;还有一些我没准备到的Java八股文&#xff1a;Java类的加载过程&#xff0c;发射机制&#xff0c;redis存储结构&#xff0c;二叉平衡树等。但我也都没回答上来。应该无了。 2023-1…...

vue项目打包,使用externals抽离公共的第三方库

封装了一个插件&#xff0c;用来vue打包抽离公共的第三方库&#xff0c;使用unplugin进行插件开发&#xff0c;vite对应的功能使用了vite-plugin-externals进行二次开发 github地址 npm地址 hfex-auto-externals-plugin 自动注入插件,使用 unplugin 和 html-webpack-plugin进…...

九阳真经之各大厂校招

大学计算机系的同学要怎么努力才能校招进大厂? 秋招的大公司非常多&#xff0c;也是非常好的&#xff0c;赶上了秋招&#xff0c;你基本工作就敲定了&#xff0c;在整个应届毕业生的人群中你就占据很大的优势了。 如何准备应届校招&#xff1f; 一、做好规划&#xff0c;把…...

春和景明聚知己 嬴氏酒香醉春光

春风送暖&#xff0c;万物复苏&#xff0c;山野间绿意蔓延&#xff0c;枝头繁花盛放&#xff0c;正是一年中踏春赏景、邀约好友共赴自然的绝佳时节。褪去日常的忙碌与疲惫&#xff0c;邀三五知己&#xff0c;寻一处清幽草地&#xff0c;伴青山绿水、鸟语花香&#xff0c;围坐一…...

干货 | SpringBoot 缓存实战:击穿、穿透、雪崩 通俗解决方案(附可落地代码)

一、前言做 Java 后端开发&#xff0c;只要用了 Redis 缓存&#xff0c;缓存击穿、缓存穿透、缓存雪崩这三个坑绕不开。面试必问、线上必踩。本文不讲晦涩底层源码&#xff0c;用大白话讲原理 SpringBoot 可直接复制的实战代码&#xff0c;新手能看懂&#xff0c;项目能直接上…...

wso~.升级到.需要更新的数据表

我为什么会发出这个疑问呢&#xff1f;是因为我研究Web开发中的一个问题时&#xff0c;HTTP请求体在 Filter&#xff08;过滤器&#xff09;处被读取了之后&#xff0c;在 Controller&#xff08;控制层&#xff09;就读不到值了&#xff0c;使用 RequestBody 的时候。 无论是字…...

C语言整数字节拆解:联合体与移位操作详解

1. 理解题目&#xff1a;整数字节拆解的核心需求 在嵌入式开发和底层系统编程中&#xff0c;处理多字节数据是家常便饭。就拿这个面试题来说&#xff0c;我们需要从32位无符号整数0x12345678中提取出它的四个独立字节。这看似简单的需求背后&#xff0c;其实涉及到计算机系统中…...

PCBA加工中极性元件的识别与防错指南

1. 极性元件在PCBA加工中的重要性在PCBA&#xff08;印刷电路板组装&#xff09;加工过程中&#xff0c;极性元件就像电路中的"单行道"——方向错了&#xff0c;整个系统就会瘫痪。作为一名有十年经验的电子工程师&#xff0c;我见过太多因为极性元件反向导致的批量性…...

SenseVoicecpp ggml-vulkan.cpp大模型[AI人工智能(七十八)]—东方仙盟

ggml-vulkan.cpp核心代码ggml-vulkan 里负责【矩阵乘法 量化模型推理 GPU 调度】的核心代码。1. 核心功能支持所有量化类型&#xff1a;Q4_K、Q5_K、Q8_0、IQ2/3/4、F16、F32 等自动选择最优计算管线&#xff1a;根据数据类型选 FP16/FP32 精度管理 GPU 内存&#xff1a;显存…...

MAX17043电量计驱动开发:嵌入式电池管理实战指南

1. MAX17043 电量计库深度解析&#xff1a;面向嵌入式工程师的底层驱动开发指南1.1 芯片级功能定位与工程价值MAX17043 是 Maxim Integrated&#xff08;现为 Analog Devices&#xff09;推出的高精度单节锂离子/锂聚合物电池电量计 IC&#xff0c;采用 12 引脚 TDFN 封装&…...

告别复制粘贴:用影刀RPA+飞书多维表格,我把每周的销售数据汇总从2小时缩到5分钟

告别复制粘贴&#xff1a;用影刀RPA飞书多维表格实现销售数据自动化革命 每周五下午&#xff0c;市场部的张经理总要面对同样的噩梦&#xff1a;从七个不同渠道导出销售数据&#xff0c;手动核对格式差异&#xff0c;复制粘贴到汇总表&#xff0c;再计算各类指标。这个重复劳动…...

数据管理效率低下?MongoDB Compass 重新定义数据库可视化:从入门到精通的非线性学习路径

数据管理效率低下&#xff1f;MongoDB Compass 重新定义数据库可视化&#xff1a;从入门到精通的非线性学习路径 【免费下载链接】compass The GUI for MongoDB. 项目地址: https://gitcode.com/gh_mirrors/com/compass 当你面对命令行中密密麻麻的 MongoDB 数据时&…...

nba篮球数据项目书

import pandas as pd import randomdef get_2000_nba_players():"""生成2000条NBA球员数据&#xff08;基于真实球员名 合理数据&#xff09;100%成功&#xff0c;无需网络请求"""# 真实NBA球员名&#xff08;前200名真实球员&#xff09;real_…...