题目链接: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. vue 的 watch 如何在初始化时执行

    之前的做法一直是在 created 钩子之后手动调用一次 created() { this.fetchText(); }, watch: { text: 'fetchText', } 后来在翻阅文档的 ...

  2. 斜率dp的模板总结

    #include<cstdio> #include<algorithm> using namespace std; long long sumt[40005],sum[4000 ...

  3. Codeforces 704E Iron Man [树链剖分,计算几何]

    Codeforces 这题--真是搞死我了-- 好不容易下定了决心要不颓废,要写题,结果一调就调了十几个小时-- 思路 我们发现在树上做非常不舒服,于是树链剖分之后一次在重链上的移动就可以看做是在df ...

  4. xshel链接linuxl安装nginx

    原文链接:https://blog.csdn.net/Sweet__dream/article/details/78256952?utm_source=blogxgwz9 这个连接更详细:https: ...

  5. 跑shell脚本出错问题以及解决。

    脚本信息: #!/bin/bash function hello(){ cat <<YJT echo "hello world!!!" YJT } hello 错误: ...

  6. Ubuntu16.04 apache2+php7.0+mysql5.7环境搭建

    今天配置一下web环境,很常见的apache+php+mysql的网站环境: 步骤一:安装apache sudo apt install apache2 步骤二:安装php7 1.安装PHP7和响应的 ...

  7. OpenFOAM中的热传导?【翻译】

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam/70758-conductive-heat-transfer-openfoa ...

  8. RK3288 修改ddr频率

    转载请注明出处:https://www.cnblogs.com/lialong1st/p/10912334.html CPU:RK3288 系统:Android 5.1 RK3288 的 ddr 频率 ...

  9. SEQ!org.apache.hadoop.io.LongWritable

    [uhadoop@10-13-109-236 subdir26]$ $HADOOP_HOME/bin/hadoop fs -cat /data/flumeEvents/FlumeData.155980 ...

  10. BitmapFactory: 通过Bitmap的getWidth和getHeight方法获取到的尺寸与实际尺寸不符的问题

    问题 今天无意中发现了一个问题,通过Bitmap的getWidth和getHeight方法获取到的图片尺寸与实际的尺寸(1920*1080)不一致,后来更进一步发现,把这张图片分别放在raw.draw ...