POJ - 2528 - Mayor's posters 【线段树+离散化+补点】

告别USB转接:在STM32探索板上用SPI跑通ESP-Hosted,实现Wi-Fi/BLE连接 本文详细介绍了如何在STM32F469I-DISCO开发板上通过SPI接口实现ESP-Hosted方案,为嵌入式设备添加Wi-Fi和蓝牙连接功能。通过硬件配置、协议栈优化和性能测试,展示了这一创新方案的成本效益和开发效率,特别适合资源受限但需要稳定无线连接的嵌入式应用场景。 阅读详情
http://poj.org/problem?id=2528

几个可以很好确定自己离散化是否有问题的样例:

2
3
1 10
1 4
5 10

 

3
1 10
1 4
6 10

 

答案分别是:2和3

#include <cstdio>
#include <iostream>
#include <set>
#include <cstring>
#include <string>
#define left rt<<1
#define right rt<<1|1
using namespace std;

const int MAXN = 32768 + 5;
int setv[MAXN << 2]; // 很不科学,这里一定要开大一点才AC,按道理说2*MAXN-1的空间就够了的。。。WA到哭泣
int hash[10000005];

struct Interval{
    int l, r;
} a[10005];

bool color[10005];
int ans;

void pushdown(int rt)
{
    if(setv[rt] != -1) {
        setv[left] = setv[right] = setv[rt];
        setv[rt] = -1;
    }    
}

void update(int ql, int qr, int x, int rt, int l, int r)
{
    if(ql <= l && r <= qr) {
        setv[rt] = x;
        return;
    }    
    pushdown(rt);
    int m = (l + r) >> 1;
    if(ql <= m)    update(ql, qr, x, left, l, m);
    if(qr > m)    update(ql, qr, x, right, m+1, r);
}

void query(int ql, int qr, int rt, int l, int r)
{
    if(setv[rt] != -1) {
        if(!color[setv[rt]]) {
            ans++;
            color[setv[rt]] = 1;
        }
        return;
    }
    if(l==r)    return;
    
    pushdown(rt);
    int m = (l + r) >> 1;
    if(ql <= m)    query(ql, qr, left, l, m);
    if(qr > m)    query(ql, qr, right, m+1, r);
}

int main ()
{
    int c, n;
    scanf("%d", &c);
    while(c--) {
        scanf("%d", &n);
        set<int> st;
        for(int i=0; i<n; i++) {
            scanf("%d%d", &a[i].l, &a[i].r);
            st.insert(a[i].l);
            st.insert(a[i].r);
        }
        int pre, tot=0;
        for(set<int>::iterator p=st.begin(); p != st.end(); ++p) {
            if(p==st.begin()) {
                hash[*p] = ++tot;
            } else {
                if(*p - pre == 1) {
                    hash[*p] = ++tot;
                } else {
                    hash[*p - 1] = ++tot;
                    hash[*p] = ++tot;
                }
            }
            pre = *p;
        }
        memset(setv, -1, sizeof(setv));
        memset(color, false, sizeof(color));
        
        for(int i=0; i<n; i++) {
            update(hash[a[i].l], hash[a[i].r], i+1, 1, 1, tot);
        }
        ans = 0;
        query(1, tot, 1, 1, tot);
        printf("%d\n", ans);
    }
    return 0;
}

一种更节省空间的版本,省去了hash数组,因为已经排序了,所以可以二分查找找到对应的下标:

#include <cstdio>
#include <iostream>
#include <set>
#include <cstring>
#include <string>
#include <algorithm>
#define left rt<<1
#define right rt<<1|1
using namespace std;

const int MAXN = 32768 + 5;
int setv[MAXN << 2];

struct Interval{
    int l, r;
} a[10005];

bool color[10005];
int ans;
int t[10005 * 3];

void pushdown(int rt)
{
    if(setv[rt] != -1) {
        setv[left] = setv[right] = setv[rt];
        setv[rt] = -1;
    }    
}

void update(int ql, int qr, int x, int rt, int l, int r)
{
    if(ql <= l && r <= qr) {
        setv[rt] = x;
        return;
    }    
    pushdown(rt);
    int m = (l + r) >> 1;
    if(ql <= m)    update(ql, qr, x, left, l, m);
    if(qr > m)    update(ql, qr, x, right, m+1, r);
}

void query(int ql, int qr, int rt, int l, int r)
{
    if(setv[rt] != -1) {
        if(!color[setv[rt]]) {
            ans++;
            color[setv[rt]] = 1;
        }
        return;
    }
    if(l==r)    return;
    
    pushdown(rt);
    int m = (l + r) >> 1;
    if(ql <= m)    query(ql, qr, left, l, m);
    if(qr > m)    query(ql, qr, right, m+1, r);
}

int Bin(int key,int n,int X[]) {
    int l = 1,r = n; 
    while (l <= r) { // [l, r]
        int m = (l+r) >> 1;
        if(X[m] == key) return m;
        if(X[m] < key)    l=m+1; 
        else    r=m-1;
    }
    return -1; 
}


int main ()
{
    int c, n;
    scanf("%d", &c);
    while(c--) {
        scanf("%d", &n);
        set<int> st;
        for(int i=0; i<n; i++) {
            scanf("%d%d", &a[i].l, &a[i].r);
            st.insert(a[i].l);
            st.insert(a[i].r);
        }
        memset(setv, -1, sizeof(setv));
        memset(color, false, sizeof(color));

        int tot = 0;
        for(set<int>::iterator p=st.begin(); p != st.end(); ++p) {
            t[++tot] = *p;
        }
        int temp_tot=tot;
        for(int i=2; i<=temp_tot; i++) {
            if(t[i]-t[i-1] > 1)    t[++tot] = t[i]-1;
        }
        sort(t+1, t+tot+1);
        
        for (int i = 0; i < n; i++) {
            int l = Bin(a[i].l , tot , t);
            int r = Bin(a[i].r , tot , t); 
            update(l, r, i, 1, 1, tot);
        }
        ans = 0;
        query(1, tot, 1, 1, tot);
        printf("%d\n", ans);
    }
    return 0;
}

 

从真题到策略:浙江工业大学计算机转专业机试全解析与备考指南 本文全面解析浙江工业大学计算机转专业机试的考试概况、典型真题和高频考点,提供详细的备考策略和面试准备建议。从机试题目类型到解题技巧,帮助考生高效备考,顺利通过这一竞争激烈的转专业关卡。 阅读详情

相关推荐

脑电时频分析I:谱分析

1、EEG频带划分 自发的EEG活动在活体大脑中持续存在,通常通过频率进行分类(也叫神经振荡活动) 特定频段的脑活动,即节律性的活动,具有特定的头皮分布和生物学意义 最后还有一个γ波,主要是指30hz~100hz的一个波段,通常这个波段也包含了噪声唁电的成分,比较难提取处理,比较少用到这个波段 这个波段主要是有可能躯体感觉皮层,进行一个多通道的感觉输入的i信号处理,比如我们同时处理视觉和听觉信号的处理,而且γ波与我们记忆的形成有关 除此之外,还有一个特殊的波段,8~12hz的Mu波段主要是特指我们

Kobe123brant的博客 1万+

ACIS系统体系

.     引言 随 着计算机图形学、人工智能、计算机网络等基础技术的发展和计算机集成制造、并行工程、协同设计等现代设计理论和方法的研究,使得CAD系统也由单纯二维绘 图向三维智能设计、物性分析、动态仿真方向发展,参数化设计向变量化和VGX(超变量化)方向发展,几何造型、曲面造型、实体造型向特征造型以及语义特征 造型等方向发展。伴随着软件的开放性、组件化要求和大型系统的复杂化,使得基于通用平台

河马的BLOG 2754

IPC-7351标准实战:如何用LPWizard_10快速生成PCB封装库(附避坑指南)

本文提供了一份详细的IPC-7351标准实战指南,手把手教你使用LPWizard_10软件快速生成符合行业标准的PCB封装库,并直接导入Cadence Allegro。文章深入解读了IPC-7351密度等级的选择逻辑,并重点分享了软件配置、QFN封装生成实战步骤,以及导出失败、焊盘异常等常见问题的避坑解决方案,旨在帮助硬件工程师提升设计效率和可靠性。

weixin_29207439的博客 153

ACIS 创建只有一个点的实体(BODY)

创建一个只包含一个点的BODY*类型数据

sinat_39088557的博客 1020

【2023版】基于JT808/JT1078协议的车载视频监控平台开发实战-开源架构解析

本文详细解析了基于JT808/JT1078协议的车载视频监控平台开发实战,涵盖协议核心作用、开源架构设计、开发避坑指南及二次开发建议。重点介绍了JT1078协议在音视频传输中的优化方案,以及海量位置数据存储、高可用架构等关键技术点,为开发者提供全面的实战参考。

weixin_26965807的博客 233

别再只调陀螺仪了!用OpenCV实现基于透视变换的EIS防抖,实测效果媲美手机

本文深入探讨了基于透视变换的EIS电子稳像技术,通过OpenCV实现高阶防抖算法,效果媲美主流手机厂商方案。详细解析了传统旋转平移模型的局限性,并展示了透视变换在复杂场景下的优势,包括数学原理、OpenCV实战代码及性能优化技巧,为视频防抖提供了专业解决方案。

weixin_42613501的博客 449

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万+

华为OD机试真题 新系统【网络数据包收发处理】

华为OD机试 新系统真题【网络数据包收发处理】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【网络数据包收发处理】多语言题解。

qq_45776114的博客 442

Mayor's posters poj 2528

题目链接:http://poj.org/problem?id=2528 题目大意:贴海报,可以互相覆盖,问贴完所有海报最后能看到几张海报。 先离散化然后用线段树求解即可。 代码: #include #include #include using namespace

凌风 1384

通信原理 | python调制识别数据及代码

数据集包含了从-20dB 到+18dB 总共 20 个信噪比(步长为 2)下的 11 种调制信号, 包括 AM-DSB、 AM-SSB 和 WBFM 三种模拟调制信号,以及 BPSK、 QPSK、 8PSK、 CPFSK、 GFSK、 PAM4、 QAM16 和 QAM64 八种数字调制信号。其中信号的中心频率为 200KHz,采样频率为 1Msamp/s,且每个信噪比下每种调制信号包含 1000 个信号。其中每个信号包含 IQ 两路数据,且每一路数据都包含有 128 个采样点。

若北辰 1757

硅基半导体量子点:单电子自旋量子比特技术手册

现在我们已经了解了从硅片到容错计算的全部环节,让我们用一张总览图把碎片拼成完整拼图。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;important;important;important;color:#000!important;important;important;important;important;color:#000!

VectorShift的博客 367

POJ - 2528 Mayor's posters(区间覆盖,离散化)

POJ - 2528 Mayor’s posters 题目 给出 n 段区间,区间按给出的顺序会覆盖掉前面的区间,问最后能看到多少不同的区间。 分析 这题只需要用到懒惰标记即可,线段树没有维护什么东西,有懒惰标记 c 代表这个区间被 c 覆盖了。 只不过要用到离散化,题目给出的数据我们只在乎他们的相对大小,相对大小才会影响到区间覆盖的结果 。 通常离散化的时侯是离散到连续的区间,但是有问题,比如数...

Stormjing的博客 311

SDR 和 DDR 的区别

SDR 和 DDR 的差别,最明显提现在传输速率和频率上。DDR SDRAM与SDRAM的基本结构是相似的,最根本的区别在于DDR 支持在一个时钟周期内传输两次数据,,SDR 只能传输一次数据。

串起点滴 1956

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

MetalSeed 4791

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

【离散化+线段树】POJ 2528 Mayor's posters

POJ 2528 Mayor’s posters 题意: 在一个长度为1e7的墙上贴海报。n(<=1e4)张海报贴上去,海报可能会出现覆盖,贴完所有的海报之后能看见多少张(能看见一部分也算)海报。给出的海报信息是从第一张到最后一张(也就是贴的顺序)。 思路: 首先海报的位置可以是1-1e7间的任意位置,所以我们需要离散化一下。 关于离散化: 1. 左右位置2n个数去重排序后,如果前后两...

L_X_ 235

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

poj2528Mayor's posters(线段树)

最近此题根本没有什么卡点,从昨天晚上开始

u010839163的专栏 569

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【详解】Mayor's posters POJ - 2528(线段树 区间染色 离散化) ⭐⭐⭐⭐

Mayor’s posters POJ - 2528 n(n<=10000) 个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000) 。求出最后还能看见多少张海报。 Input 第一行: 样例个数T 第二行: 贴海报的人n 第三行: 每个人贴海报的范围 接下来n行: 每个人贴海报的范围 Output 对于每一个输入,输出最后可以看到的海报...

Suprit's blog 926

poj 2528 Mayor's posters 线段树+离散化技巧

poj 2528 Mayor's posters 题目链接: http://poj.org/problem?id=2528 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) 假设给出: 1~10 1~4 7-10 最后可以看见三张海报 如果离散化的时候不注意,就会变成 1 4 7 10(原始) 1 2 3 4 (离散化) 转化为: 1~4 1~2 3~4 这...

ddqb3235的博客 208

poj 2528 Mayor's posters

线段树+离散化处理。 写的我好蛋疼啊!!! 不过总算过了。 /* POJ: 2528 Mayor's posters */ #include #include #include #include #include #include #include #include #include #include #include using namespace std; c

stormdpzh的专栏 460

【线段树_离散化_染色问题】POJ 2528 Mayor's posters

POJ 2528 Mayor's posters 题意: 在一个长度为1e7的墙上贴海报。n(<=1e4)张海报贴上去,海报可能会出现覆盖,问:贴完所有的海报之后能看见多少张(能看见一部分也算)海报。给出的海报信息是从第一张到最后一张(也就是贴的顺序)。 思路: 线段树染色问题。 区间数据范围过大,离散化。【注意因为是区间,所以离散化的时候要注意两个数据是不是...

L_X_ 360

POJ 2528 Mayor's posters

POJ 2528 Mayor’s posters题目链接Description给N个海报,每个海报有L,R,表示这块区域被覆盖,问最后有多少块区域被覆盖Algorithm线段树每个节点的附加信息v的意义是 这块区域没有任何一个海报覆盖 v = 0 这块区域内(不完全重合)有不止一块海报覆盖 v = 0 这块区域只有一块海报覆盖 v = i (i 为第 i 个海报) 线段树三个函数 build 建树,

more time 210

离散化/线段树 (POJ - 2528 Mayor's posters)

题目链接 对于这个题,网上的很多题解对离散化的过程基本是一笔带过,本蒻苟看了很久才懂。现在在这详细讲一下这个题区间的离散化。 首先,看下面这个例子(几个区间): [1, 5] [2, 7] [8, 10] 在数组上表示: 这是咱们发现一个事实:对于这些区间,我们保留某些点的信息是没有意义的,比如:3,4,6,9。对于这些点,它们一直被包含在一个大区间里。所以,我们考虑把这些点压缩点,你可以想...

平凡人Kalzn的博客 1278

poj 2528 Mayor's posters 线段树+离散化

题意: 有一个100000000长的墙,现在要到墙上贴一些海报,因为贴的时候可以覆盖所以问最后你可以看见多少张海报(不要求完整的海报,有一个部分没被覆盖那么 就认为可以看见这个海报) 其中海报最多10000张 海报有2个数据 它贴在墙上的左端点值l和右端点值r 其中 110000000 数据的输入格式  先给出 T 情况的种数,再给出每一种情况的海报数量N 然后给出N张海报的数据,ok,题意

柯安的专栏 1023

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

Must so 1072

POJ2528——Mayor's posters

题目链接:Mayor’s posters 推荐博客:【完全版】线段树(转载) 题目: 在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报(后面贴的海报覆盖前面的) 分析: 离散化要保存所有需要用到的值,排序后,分别映射到1~n,这样复杂度就会小很多很多 而这题的难点在于每个数字其实表示的是一个单位长度(并且一个点),这样普通的离散化会造成许多错误 代码: #include<stdio.h...

浦柳人的博客 372
上一篇: UVA - 11992 —— Fast Matrix Operations 【二维线段树转一维】
下一篇: POJ - 3225 - Help with Intervals 【区间的并、交、差、对称差】
AcIsFun
博客等级 码龄10年 1粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值