题目链接:https://ac.nowcoder.com/acm/contest/1106/A

题目大意:

1.一条长1e9的线段,每个节点都可以上色。给出n次操作,每次操作将【l, r】区间内的节点染一次色。问最后染色次数的最大值是多少。

题解思路:

1.首先想到暴力,即遍历每个区间+1,对最终结果遍历一遍找最大值,但是1e9的长度一定超时。

2.解决超时就得缩小遍历长度,由于每个区间都是连续的,那么我们可以通过记录端点来达到记录区间同样的效果。即利用差分数组。A的差分数组B:第i位的值表示A的第i位与A的第i-1位的差值。当A数组【l,r】区间都增加k(k可为负)时,对于B,只需要改变B【l】+= k,B【r + 1】-= k。接下来讨论一下如何记录端点:对于每次给定的区间【l,r】,【l,r】区间内每一个数+1,即为B【l】+= 1,B【r + 1】-= 1。最后n次操作结束后,对B差分数组进行前缀和,即可得到染色最大次数。

3.由于1e9的区间长度,我们还需要进行离散化,我的思路是将出现的点升序排序并去重。对于每个点都映射为其排序后的下标。(用map实现)

代码如下:

 #include<stdio.h>
#include<map>
#include<string.h>
#include<algorithm>
const int MAXN = 1e5 + ;
using namespace std; int a[MAXN], sum[MAXN], b[MAXN];
map<int, int>mp; struct Query
{
int l, r;
}q[MAXN / ]; int main()
{
int n, cnt = ;
scanf("%d", &n);
for(int i = ; i <= n; i ++)
{
int l, r;
scanf("%d%d", &l, &r);
q[i].l = l, q[i].r = r;
a[++ cnt] = l, a[++ cnt] = r;
}
sort(a + , a + + cnt);
int len = (unique(a + , a + + cnt) - (a + ));
for(int i = ; i <= len; i ++)
mp[a[i]] = i;
for(int i = ; i <= n; i ++)
{
b[mp[q[i].l]] ++;
b[mp[q[i].r] + ] --;
}
int ans = ;
for(int i = ; i <= len; i ++)
{
sum[i] = sum[i - ] + b[i];
ans = max(ans, sum[i]);
}
printf("%d\n", ans);
return ;
}

Soda Machine【差分+离散化】的更多相关文章

  1. BZOJ 2501: [usaco2010 Oct]Soda Machine 离散+差分

    [usaco2010 Oct]Soda Machine Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 266  Solved: 182[Submit][ ...

  2. [usaco2010 Oct]Soda Machine

    题目描述 有N个人要去膜拜JZ,他们不知道JZ会出现在哪里,因此每个人有一个活动范围,只要JZ出现在这个范围内就能被膜拜, 伟大的JZ当然希望膜拜他的人越多越好,但是JZ不能分身,因此只能选择一个位置 ...

  3. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼( 差分 + 离散化 + 树状数组 )

    假如矩阵范围小一点就可以直接用二维树状数组维护. 这道题,  差分答案, 然后一维排序, 另一维离散化然后树状数组维护就OK了. ----------------------------------- ...

  4. [BZOJ3932] [CQOI2015]任务查询系统(主席树 || 树状数组 套 主席树 + 差分 + 离散化)

    传送门 看到这个题有个很暴力的想法, 可以每一个时间点都建一颗主席树,主席树上叶子节点 i 表示优先级为 i 的任务有多少个. 当 x 到 y 有个优先级为 k 的任务时,循环 x 到 y 的每个点, ...

  5. 2019上海网络赛B题(差分 + 离散化 or 差分 + 思维)

    这题.....队里都没怎么训练差分,导致败北...写了一堆线段树嘤嘤嘤,到最后也是超时,比赛结束后看到了差分的思想于是就去学了一手. 其实了解差分思想的一眼就能看出来是差分了.但是如果对n差分的话很明 ...

  6. BZOJ 2501 Soda Machine

    BIT+离散化. #include<iostream> #include<cstdio> #include<cstring> #include<algorit ...

  7. BZOJ2501: [usaco2010 Oct]Soda Machine

    n<=50000个区间,求哪个点被覆盖区间数量最多,输出这个数量. 差分模板..然而数组忘开两倍.. #include<stdio.h> #include<string.h&g ...

  8. BZOJ 2501 [usaco2010 Oct]Soda Machine

    [题意概述] 给出一个[0,1,000,000,000]的整数数轴,刚开始每个位置都为0,有n个区间加操作,最后询问数轴上最大的数是多少. [题解] 我写的是离散化后线段树维护区间最值. 其实貌似不用 ...

  9. P3028 汽水机(差分)

    题目 P3028 [USACO10OCT]汽水机Soda Machine 解析 差分,看到\(a[i]\leq 1e9\),离散化一下,在\(l\)处\(+1\),\(r+1\)处\(-1\),这样就 ...

随机推荐

  1. qt动态库实现无边框窗体的消息处理 nativeEvent的使用

    需求: 在动态库中创建一个窗口句柄,可以给外部调用,库的调用者,通过这个句柄发送消息到底层库,库里面可以实现对消息的处理 m_FHandle=AllocateHWnd(WndProcDllMsg); ...

  2. AdvanceEast源码理解

    目录 文章思路 源码理解 一. 标签点形式 按顺序排列四个点,逆时针旋转,且第一个点为左上角点(刚开始选择最左边的点, 二. 标签切边 三. loss计算 四. NMS 最后说明 文章思路 大神的gi ...

  3. unity Assetboundle 工具

    Unity Asset Bundle Browser tool https://github.com/Unity-Technologies/AssetBundles-Browser assetboun ...

  4. 关于解决ruby源码安装 gem install报错问题

    因做redis集群需要安装ruby,源码安装过后gem install redis安装redis接口报错 解决方案: 确保主机安装zlib,没有安装执行 yum -y install zlib zli ...

  5. 小程序弹出toast,怎么优化代码

    因为toast是会重复调的,所以可以直接写在app里面 在所有的子页面去调这个就好了. 如果是设的none那就是 设置的 就是

  6. 米津玄師 - Lemon

    Lemon 词:米津玄師 曲:米津玄師 夢(ゆめ)ならば どれほどよかったでしょう 未(いま)だにあなたのことを夢(ゆめ)にみる 忘(わす)れた物(もの)を 取(と)りに帰(かえ)るように 古(ふる) ...

  7. 1.linux 基本操作和命令

    整理复习之前的linux学习笔记,正好贴出来了.   1.[root@chen ~]#    [当前登录用户@主机名  当前所在目录]# 当前用户身份     #号表示管理员root     $号表示 ...

  8. Elasticsearch6.4.0-windows环境部署安装

    Elasticsearch可以轻松的实现全文检索,本文主要介绍Elasticsearch(ES)环境的安装部署,该文及后续使用的ES版本为6.4.0.希望能够帮助到大家. 一.安装Elasticsea ...

  9. LiquiBase实战总结

    LiquiBase概述 Liquibase是一个用于跟踪.管理和应用数据库变化的开源的数据库重构工具.它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制. Liquibase具备 ...

  10. 远程控制软件 mRemoteNG,管理多台虚拟机

    #下载 1.官网下载:https://mremoteng.org/2.当然也可以到这里下载:https://pan.baidu.com/s/11O_QNM3HudN3IyTiqqHmrQ,提取码:jm ...