题目链接: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. 三个方法(apply、call、bind)

    一.apply()和call() 方法中如果没传入参数,或者是null,那么调用该方法的函数对象中的this就是默认的window <script> function f1(x,y){ c ...

  2. 5-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(,远程升级GPRS内部程序)

    https://www.cnblogs.com/yangfengwu/p/10410202.html 与升级WIFI相同介绍的不再叙述  先看WIFI升级的: ↑ 演示视频: https://www. ...

  3. Educational Codeforces Round 70

    目录 Contest Info Solutions A. You Are Given Two Binary Strings... B. You Are Given a Decimal String.. ...

  4. LibreOJ #115. 无源汇有上下界可行流

    二次联通门 : LibreOJ #115. 无源汇有上下界可行流 /* LibreOJ #115. 无源汇有上下界可行流 板子题 我也就会写写板子题了.. */ #include <cstdio ...

  5. Angular2日期格式化

    一:组件日期格式化: ts中调用: import {DatePipe} from "@angular/common"; @Component({     providers: [D ...

  6. 使用Spring Ehcache二级缓存优化查询性能

    最近在对系统进行优化的时候,发现有些查询查询效率比较慢,耗时比较长, 通过压测发现,主要耗费的性能 消耗在 查询数据库,查询redis 数据库:连接池有限,且单个查询不能消耗大量的连接池,占用大量IO ...

  7. JavaScript中,返回上一个页面时,如何保证上一个页面的不刷新?

    history.back()和history.go(-1)都可以实现返回上一页并不刷新.History 对象包含用户(在浏览器窗口中)访问过的 URL. history.back() 等同于在浏览器点 ...

  8. spring boot + vue 前后分离实现登录功能(二)

    安装 axios 进行路由转发 npm install axios --save-dev 或者 cnpm install axios --save-dev 修改 Main.js 新增 var axio ...

  9. 激活函数,Batch Normalization和Dropout

    神经网络中还有一些激活函数,池化函数,正则化和归一化函数等.需要详细看看,啃一啃吧.. 1. 激活函数 1.1 激活函数作用 在生物的神经传导中,神经元接受多个神经的输入电位,当电位超过一定值时,该神 ...

  10. Googletest - Google Testing and Mocking Framework

    Googletest - Google Testing and Mocking Framework https://github.com/google/googletest