POJ 2528 Mayor's posters 【离散化+线段树区间覆盖】

POJ2528-Mayor's posters 测试数据 POJ2528-Mayor's posters 测试数据。数据来源:Alberta Collegiate Programming Contest 2003.10.18 – 问题G 立即下载

题目链接:http://poj.org/problem?id=2528

思路:

这里着重讲讲离散化的方式。离散化的方式是根据题目意思来选择的,不同的题目会有不同的离散化方式。

这里题目要求的是在n次区间覆盖过后,求没被覆盖的海报有多少个; 题目给出可能的区间多达 1e7 ,如果用线段树的区间覆盖就需要开 4倍的空间,因为题目给出的空间有限,直接就用线段树显然是不行的。

我们先从结果开始考虑,n次覆盖过后,最后得到的是一整个区间有若干个连续的小区间,我们要求的就是这些区间中不重复的个数,显然这些区间有多长是不影响结果的,只要知道这个区间存在就行了,比如说 1-5 有两个连续的区间1-2 和 2-5,我们把这两个区间压缩成长度为1的区间可以得到  1-2 和2-3 ,那么整个区间就只需要1-3 就足够了。这就是这道题离散化的方式。

我们假设题目给出的区间各不相交, 那么最多需要准备 2*n的区间,题目给出的n是很小的,所以这种离散方式是合理的。

红色的数字就是离散化后区间端点,原本长度为10的区间能离散成长度为7的区间,不仅不会影响答案还能节省空间;

代码的离散过程就是依次读入区间左右端点,排序过后再去重,对应数组的下标就是对应端点离散化后的区间端点;

#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <cstdlib>
#include <cmath>
#include <set>

using namespace std;

const int Maxn = 2e4+10;

int Set[4*Maxn], x, y, z, ans, v[Maxn];
bool vis[Maxn];
vector <pair <int, int> > a;

void update (int o, int L, int R) {
    int lc = 2*o, rc = 2*o+1;
    if (x <= L && R <= y) {
        Set[o] = z;
    } else {
        if (Set[o] > 0) {
            Set[lc] = Set[rc] = Set[o];
            Set[o] = 0;
        }
        int M = L+(R-L)/2;
        if (x <= M) update (lc, L, M);
        if (M < y) update (rc, M+1, R);
    }
}

void solve (int o, int L, int R) {
    int lc = 2*o, rc = 2*o+1;
    if (Set[o] > 0) {
        if (!vis[Set[o]]) {
            ans++; vis[Set[o]] = true;
        }
    } else {
        if (L == R) return;
        int M = L+(R-L)/2;
        solve (lc, L, M);
        solve (rc, M+1, R);
    }
}

int main (void)
{
    int T;
    scanf ("%d", &T);
    while (T--) {
        int n, maxn = 0;
        scanf ("%d", &n);
        memset (Set, 0, sizeof (Set));
        a.clear();
        for (int i = 1; i <= n; ++i) {
            scanf ("%d%d", &x, &y);
            a.push_back(make_pair(x, y));
            v[maxn++] = x; v[maxn++] = y;
        }
        int m = a.size();
        sort (v, v+maxn);
        maxn = unique(v, v+maxn)-v;
        for (int i = 0; i < m; ++i) {
            x = lower_bound(v, v+maxn, a[i].first)-v+1; // 找出对应的下标
            y = lower_bound(v, v+maxn, a[i].second)-v+1;
         //   cout << x << " " << y << endl;
            z = i+1;
            update (1, 1, maxn);
        }
        ans = 0;
        memset (vis, false, sizeof (vis));
        solve (1, 1, maxn);
        printf ("%d\n", ans);
    }
    return 0;
}

 

poj-2528 Mayor's posters 测试数据及答案 立即下载

相关推荐

Python学习(一)

快速入门 1.Linux系统中是可以直接使用Python进行编程,具体如下: 进入Python:在linux的Terminal中输入 Python ,进入Python的命令行; 退出Python:在linux的Terminal中输入quit() 或 exit() 或 ctrl +d ,再回车,退出Python的命令行。 2.python的源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做Python的开发。 3.Python程序的文件扩展名通常都是 .py。 4.执行Python程序的方式:在

SummerXRT的博客 1281

线段树专题 D - Mayor's posters (离散化 贴海报)

D - Mayor's posters 题目链接 题意: 在宽度为10000000的墙壁上,按顺序贴n张海报(1 &lt;= n &lt;= 10000),每种海报的颜色不同,颜色用数字表示,且第 i 张海报的颜色就是 i ,给出海报的左右坐标。之后贴上的海报可以覆盖之前贴上的海报。问:在贴完所有n张海报之后,能从墙上看到几种颜色。 输入: 先输入一个T(1),表示测试样例的数量...

qq_40914533的博客 285

DeepSeek 在 PostgreSQL 中,执行 `DELETE` 操作后,数据占用的空间并不会立即释放给操作系统

操作后,数据占用的空间并不会立即释放给操作系统。这是 PostgreSQL 的 MVCC(多版本并发控制)机制决定的——删除的数据只是被标记为“死元组”,物理空间仍然被表占用。这是最彻底的释放方式,会将表重写为一个没有空洞的新文件,将空间返回给操作系统。如果你的表非常大(如几百GB),或者这是生产环境的核心表,建议优先考虑。你可以告诉我你的表大概多大、是否能接受锁表,我可以给你更精确的建议。要真正释放空间,需要根据你的实际需求,从以下三种方案中选择一种。如果你既想彻底释放空间,又无法接受锁表,

m0_37843156的博客 404

D - Mayor's posters(线段树+离散化)

The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finally d...

cherish_lin的博客 295

麒麟OS恢复出厂设置原理与实操:非重装的系统状态回滚

Linux操作系统中的‘恢复出厂设置’并非简单重装或镜像还原,而是一种基于状态快照、包管理与配置模板的可控回滚机制。其核心原理依赖LVM快照技术、RPM包签名验证和预置配置模板,兼顾系统稳定性与用户数据安全。该方案在政务、教育等国产化场景中具有显著技术价值——不格式化硬盘、不丢失/home文档、不重配驱动与授权,大幅降低运维复杂度。典型应用场景包括系统卡顿修复、软件冲突清理、桌面环境异常恢复等。本文深入解析银河麒麟V10的kylin-restore-cli工具链与麒麟管家集成逻辑,聚焦‘恢复出厂设置’这一高

weixin_30879169的博客 773

【Flink】状态编程: 订单超时告警

文章目录一、基础概念二、Flink状态编程1、支持的状态类型2、Managed Keyed State六种类型基本API状态的生命周期3、Managed Operator State三、案例:订单延迟告警统计1、需求描述2、需求分析3、数据与模型4、详细实现 一、基础概念 在Flink架构体系中,有状态计算可以说是Flink非常重要的特性之一。 有状态计算是指: 在程序计算过程中,在Flink...

一只皮皮熊 2862

PKU 2528 POJ 2528 Mayor's posters ( 线段树+离散化 ) ACM 2528 IN PKU

MiYu原创, 转帖请注明 : 转载自______________白白の屋题目地址 : http://poj.org/problem?id=2528题目描述:Mayor's postersTime Limit:1000MSMemory Limit:65536KTotal Submissions:15722Accepted:4444DescriptionThe citizens o...

weixin_30471065的博客 290

在Kintex-7 FPGA上实现皮秒级时间测量:手把手教你搭建CARRY4进位链TDC(附源码与约束)

本文详细介绍了在Kintex-7 FPGA上利用CARRY4进位链实现皮秒级时间测量(TDC)的完整方案。从CARRY4的物理特性分析到硬件架构设计,再到校准方法与精度提升技巧,手把手教你构建测量精度达53ps的TDC系统,并附源码与约束文件,助力激光雷达、高能物理等精密计时应用开发。

weixin_42550052的博客 444

Mayor's posters

The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finally d...

无限迭代中...... 801

2xmax96717+max96724+agx orin驱动代码

说明:这里主要解决max96717的设备地址和sensor地址映射,vc0->vc1多颗max96717+max96724使用配置思路如下: 1、改变max96717的pipez stream id,然后max96724的pipe绑定使用相应的stream id 2、max96717默认是vc0,把vc0改写成vc1\vc2\vc3,然后max96724再重新映射vc输出

mantouyouyou的博客 113

PCIe 6.0 – 关于 PCI Express Gen6 您需要知道的一切

幸运的是,PCIe 6.0 FEC 足够轻,对延迟的影响最小。在电气层上,PCIe 6.0 使用 PAM4 信号(“四级脉冲幅度调制”),每个时钟周期将 2 位组合为 4 个幅度级别(00、01、10、11),与 PCIe 5.0 和前几代相比,它使用 NRZ 调制,每个时钟周期 1 位和两个幅度级别 (0, 1)。虽然 PAM4 信号更容易出错,但由于调制技术的性质,与 PCIe 5.0 相比,通道损耗不受影响,因此 PCB 上 PCIe 6.0 信号的范围将与 PCIe 5.0 相同。

qq_43416206的博客 3433

poj 2528 Mayor's posters(线段树区间覆盖、离散化)

Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 49385   Accepted: 14304 Description The citizens of Bytetown, AB, could not stand that the cand

hahahaha 1697

2025华为od机试真题B卷【版本管理】Python实现

在 软件版本管理中,版本号由点分割的数字组成,例如 1.2.3 和 2.8。现在,你需要编写一个函数,计算两个版本号之间的可用版本号个数。这里的可用版本号指的是所有满足 version1<x<version2的版本号x的个数。若 version1 >=version2 返回0.,

MISAYAONE的博客 644

POJ 2528 Mayor's posters 线段树 离散化 区间覆盖

题意:给一个无限长的板子,按序在上面贴海报,求出最后能看到的海报的数量 思路:区间覆盖:把对应区间的值替换为当前值。 之前的线段树节点存储的要么是区间最值,要么是区间和,这个问题则存储的是当前被覆盖的值。由于题目给的数据量太大(1e7),故需要进行离散化操作。 离散化:只保存元素之间对应的关系,不去关注元素的具体值。这个题目的离散化还有一个坑点,就是当两个区间之间有空时,不会去计算之间空的那块区域...

qq_42397248的博客 198

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

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

POJ - 2528 Mayor's posters(线段树区间覆盖+离散化)

The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finally d...

UncleJokerly 417

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

POJ - 2528 - Mayor's posters (线段树区间覆盖+离散化)

题目:POJ - 2528 题意:n个人依次贴海报,给出每张海报所贴的范围li,ri 。求出最后还能看见多少张海报。 题解:因为范围过大,所以我们考虑离散化,离散化之后把数组的下标作为线段树建树的区间,但是要注意: 如下面的例子(题目的样例),因为单位1是一个单位长度,将下面的 123467810 —————...

Rotepad的博客 326

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

POJ 2528 Mayor's posters(线段树区间覆盖+离散化)

Mayor's posters Time Limit:1000MS Memory Limit:65536K Total Submissions:87859 Accepted:25207 Description The citizens of Bytetown, AB, could not stand that the candidates in ...

YIU 189

POJ 2528 Mayor's posters 线段树的区间覆盖 离散化

//1472K 63MS #include #include #include #include #define lch(n) ((n)<<1) #define rch(n) ((n)<<1|1) using namespace std; const int MAX_N = int(1e4); bool vis[MAX_N+5]; int li[MAX_N+5], ri[MAX_N+5

ChasingWaves 612

poj2528 Mayor's posters(线段树经典例题 区间覆盖+离散化)

题目 给你一堆区间染色 保证两两颜色不同 颜色会覆盖 留下的只有上面的颜色 最后问总共有多少种不同区间在表面上 (好吧本来是贴海报 但就是这意思) 思路来源 https://blog.csdn.net/aaaaacmer/article/details/47101899(离散化技巧1) https://blog.csdn.net/winddreams/article/details/...

小衣同学的博客 355

POJ 2528 Mayor's posters (线段树+区间覆盖+离散化)

题意: 一共有n张海报, 按次序贴在墙上, 后贴的海报可以覆盖先贴的海报, 问一共有多少种海报出现过。 题解: 因为长度最大可以达到1e7, 但是最多只有2e4的区间个数,并且最后只是统计能看见的不同海报的数目,所以可以先对区间进行离散化再进行区间覆盖的操作。 由于墙上不贴东西的时候对后面没有影响, 所以可以不建树, 直接memset一下就好了。 因为是区域覆盖的问题, 树上原来的...

dengpangbu3703的博客 169

POJ - 2528 Mayor's posters (离散化+线段树区间覆盖)

Description: The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city counci...

邵光亮的博客 377

POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化)

POJ.2528 Mayor’s posters (线段树 区间更新 区间查询 离散化)题意分析贴海报,新的海报能覆盖在旧的海报上面,最后贴完了,求问能看见几张海报。最多有10000张海报,海报左右坐标范围不超过10000000。 一看见10000000肯定就要离散化了,因为建树肯定是建不下。离散化的方法是:先存到一个数组里面,然后sort,之后unique去重,最后查他离散化的坐标lower_bo

Pengwill's Blog 332

POJ 2528 Mayor's posters (线段树+离散化+区间覆盖)

题意:n(n&lt;=10000) 个人依次贴海报,给出每张海报所贴的范围li,ri(1&lt;=li&lt;=ri&lt;=10000000) 。求出最后还能看见多少张海报。 思路:由于数据范围比较大,用数组存不下,所以可以离散化成n的范围,而这题的离散化也比较特殊,因为查询的时候是一个一个点向右查找的,如果遇到1 10,1 4,6 10这种数据,那么会被离散化成1 4,1 2,3 4,这样计...

swineherd的博客 295

poj2528 区间覆盖

POJ 2528 Mayor's posters 区间覆盖,问最后看到的区间有几个。首先区间端点非常大,所以需要对区间离散化。对区间的离散化,不像以前的对点的离散化(即只要保证相对大小即可),(比如1 10 1 4 7 10这三个区间,按照对点的离散化,保持相对大小,就变成1 4 1 2 3 4,那么结果是2,实际上结果是3)。所以对区间的离散化,需要这样操作,就是让本来不相邻的数继续保持不相邻...

周周的博客 185

POJ训练计划2528_Mayor's posters(线段树/成段更新+离散化)

解题报告 地址传送门 题意: 一些海报,覆盖上去后还能看到几张。 思路: 第一道离散化的题。 离散化的意思就是区间压缩然后映射。 给你这么几个区间[1,300000],[3,5],[6,10],[4,9] 区间左右坐标排序完就是 1,3,4,5,6,9,10,300000; 1,2,3,4,5,6, 7 ,8; 我们可以把上面的区间映射成[1,8],[2,4],[5,7],[

_nplus 3万+
上一篇: poj 3468 A Simple Problem with Integers 【区间修改+区间查询(树状数组)】
下一篇: Codeforces Round #523 (Div. 2) C. Multiplicity 【dp】
Y390d
博客等级 码龄9年 11粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值