NUIST OJ 1352 回顾 【差分】

  • NUIST OJ 1352 回顾 差分

    • 题目
    • 原问题
    • 差分是什么
    • 求An数组和Sn数组
    • 快速求区间和
    • 代码呈现
    • 随便说说
    • 后记

题目

题目描述

第三次选择那些大晴天的日子,第三次行走在孤单的海岸线,第三次静静地种更多的花给自己看~
我们假设把海岸线分为n块,每块的分别标记为1…n,每块都可以种花,每次种花可以选择某个[left,right]的闭区间,每块种上一朵花.经过m次种花操作后, 输入t次区间, 根据输入的区间,求该区间内花的总数.
注意这一次,我们要看更多次的花儿,所以在第一行要输入看花的次数t

输入描述:

多组输入
对每组输入,第一行有三个整数n m t,分别代表总块数和种花的次数以及我们希望查询区间的次数.
(1 <= n, m, t<= 100000)
接下来的m行, 每行两个整数 L,R 代表[L,R]区间内每块种上一朵花.(1 <= L <= R <= n)
接下来的t行, 每行输入两个整数 a,b 代表最后要查询的花的总数的区间.(1 <= a <= b <= n)

原问题:

原问题详见
NUIST OJ 1350-1352 面朝大海,春暖花开【初识线段树】

差分是什么

所谓差分,以大家高中学到的数列概念来理解。
假设

n 1 2 3 …… n
Dn 0 1 3 …… i
An 1 2 5 …… An-1 +i
Sn 1 3 8 …… Sn-1 + An

类似于这样的差值数列。
那么在本题中,在[a,b]区间上种花,实际上带来的结果就是,a比a-1的值多1,即Dn(n=a)加了1。这样,从a区间开始往后的每一个区间,因为An(n=a)的值加了1,而他们和前一项的差值Dn(n>a)没有改变,所以实际上他们的An(n>a)都比原来大了1。而到B结束则可以将Dn(n=b+1)的值减1,这样从b+1开始,后面的值都不会受到此次操作的影响了。这样,仅仅通过对两个Dn的改变,实际上修改了整整一串的值。大大减少了时间消耗。

求An数组和Sn数组

只需要利用公式,An=An-1+Dn即可计算出An;Sn=Sn-1+An即可计算出Sn
实际上就是对数组进行了两次循环加和的操作

快速求区间和

有了Sn数组,求区间和的操作就快很多了,不需要将区间内的An一个个加起来;
At~Al的和可以用Sl-St-1求得

代码呈现

#include<cstdio>
#include<cstring>
using namespace std;
int dat[100010];
int main()
{int n, m, t, l, f, a, b;while (scanf_s("%d %d %d",&n,&m,&t)!=EOF) {memset(dat, 0, (n + 1)*sizeof(int));for (int i = 0; i<m; i++) {scanf("%d %d",&l,&f);dat[l] += 1;dat[f + 1] -= 1;}for (int i = 1; i <= n; i++)dat[i] += dat[i - 1];for (int i = 1; i <= n; i++)dat[i] += dat[i - 1];for (int i = 0; i<t; i++) {scanf("%d %d", &a, &b);printf("%d\n", dat[b] - dat[a - 1]);}}return 0;
}

随便说说

差分在处理区段求和上有非凡的表现。虽然曾经我们都学过数列,但是真正用起来的时候却完全想不到它。渍渍渍,遗憾呐。
另外,差分在这里有一个小缺陷。必须所有数据全部录入完毕之后,根据完整的Dn表格生成An表格,再根据An的表格生成Sn的表格。若是生成完毕之后其中有一处需要修改,那么需要重新生成Dn和Sn,这样就失去了它的独特优势。

后记

照例膜拜ThinkSpirit各位大佬
第一个想到这个方法的大佬解说如下
THINKSPIRIT ALGORITHM TEAM TASK #1 解题报告

NUIST OJ 1352 回顾 【差分】相关推荐

  1. NUIST OJ 1350-1352 面朝大海,春暖花开【初识线段树】

    NUIST OJ 1350-1352 面朝大海,春暖花开 NUIST OJ 1350-1352 面朝大海春暖花开 NUIST OJ 1350 面朝大海 春暖花开 基础版 NUIST OJ 1351 面 ...

  2. NUIST OJ 1364 [2017 江苏科技大学 程序设计竞赛]D.重复成绩统计(改编) 【STL-map】

    NUIST OJ 1364 [2017 江苏科技大学 程序设计竞赛]D.重复成绩统计(改编) [STL-map] NUIST OJ 1364 2017 江苏科技大学 程序设计竞赛D重复成绩统计改编 S ...

  3. NUIST OJ 1369 [2017 江苏科技大学 程序设计竞赛] B. Mr.Z 的四因子数 (数据加强版)

    NUIST OJ 1369 [2017 江苏科技大学 程序设计竞赛] B. Mr.Z 的四因子数 (数据加强版) NUIST OJ 1369 2017 江苏科技大学 程序设计竞赛 B MrZ 的四因子 ...

  4. NUIST OJ 1347 供电站 [迭代加深搜索]

    题目 题目分析 本题的坑 整体代码与运行结果 题目 题目描述 你一个程序员,不知为何就当上了你们镇的镇长(人的一生当然要靠自我奋斗,当然也要考虑历史的进程).你们镇有 N (3 <= N < ...

  5. 并查集——NUIST OJ P1648 炼丹术为例

    并查集 定义:并查集是一种树形的数据结构,用于处理一些不相交集合的合并及查询问题 主要构成: 并查集主要由一个整型数组pre[]和两个函数find().join()构成. 数组pre[]记录了每个点的 ...

  6. 差分隐私 机器学习_满足差分隐私的经验误差最小化方法

    手上的东西有点进行不下去,滚过来写专栏作下回顾.上次聊了聊差分隐私的定义,那么现在我们要在差分隐私的框架上实现机器学习任务. 关于差分隐私机器学习这个方向,Kamalika Chaudhuri 在ni ...

  7. 【Rényi差分隐私和零集中差分隐私(差分隐私变体)代码实现】差分隐私代码实现系列(九)

    差分隐私代码实现系列(九) 写在前面的话 回顾 差分隐私的变体 发明变体的动机 最大散度和Rényi散度 Rényi差分隐私 零集中差分隐私 差分隐私变体的组合情况 总结 写在前面的话 书上学来终觉浅 ...

  8. 【差分隐私组合定理,直方图,列联表代码实现】差分隐私代码实现系列(五)

    差分隐私代码实现系列(五) 写在前面的话 回顾 差分隐私的属性(Properties of Differential Privacy) 顺序组成(Sequential composition) 平行组 ...

  9. 【拉普拉斯机制代码实现demo】差分隐私代码实现系列(四)

    差分隐私代码实现系列(四) 写在前面的话 回顾 差分隐私(Differential Privacy) 拉普拉斯机制(The Laplace Mechanism) 多少噪音就足够了?(How Much ...

最新文章

  1. 【MySQL】 性能优化之 延迟关联
  2. C# 集合交、并、差、去重,对象集合交并差
  3. python把一堆图片分成n份,用Python一键生成炫酷九宫格图片,火了朋友圈
  4. 控制台文字对战游戏 初始版
  5. 项目疑难杂症记录(三):EditText获取不到焦点了?
  6. Python-爬虫-针对有frame框架的页面
  7. html点线面制作,利用HTML5绘制点线面组成的3D图形的示例_html5教程技巧
  8. chmod命令-权限
  9. Oracle服务的作用
  10. 关于@Autowired的使用:推荐使用构造函数进行注入
  11. codeproject的文章【一】
  12. 基于视频会议系统的应急指挥项目建设方案
  13. 7-77 打印学生选课清单 (25分)
  14. Redis的数据变成backup
  15. 三体 读后思考-泰勒展开/维度打击/黑暗森林
  16. Appium 关于 swipe 滑动时间控件选择时间问题,swipe 滑动没效果,用 TouchAction代替
  17. 开网店必看:母婴类目怎么做?
  18. 微信公众平台版面设计需要服务器,微信公众平台丨排版的基本原则
  19. 学习Three.js——后期处理(EffectComposer)
  20. 重磅发布《2020年中国乳制品行业数据中台研究报告》

热门文章

  1. 煤化工专用阀门有哪些?
  2. 当好色女子遇上好色之徒-案例
  3. [编译环境]Anaconda navigator怎么打不开了?
  4. Datatable 插件出现DataTable is not a function 错误
  5. Leetcode TOP Questions
  6. 被误解的C++——法国大革命
  7. 周末接受了 @36氪 网站的专访
  8. TOLT(you only look twice): Rapid multi-scale object detection in satellite imagery(中文翻译simrdwn)
  9. NLP 利器 Gensim 来训练 word2vec 词向量模型的参数设置
  10. Mapbox GL JS介绍及使用