差分:能通过O(1)的时间复杂度,进行区间修改。
核心思想:通过预处理,维护差分数组:d[i]=a[i]-a[i-1]。
区间修改操作,假设要将[l,r]加上v:d[l]+=v,d[r+1]-=v
还原原数组:a[i]=a[i-1]+d[i](做一个前缀和)
例:(1).U144400.[USACO18DEC] The Bucket List B
题目:
题目描述
Farmer John 正在考虑改变给奶牛挤奶时分配牛奶桶的方式,希望减少需要准备的桶数。
Farmer John 有 N 头奶牛,编号为 1,2,…,N。
第 i 头奶牛需要在时间 si到时间 ti之间挤奶,并且整个挤奶过程中需要占用 bi个桶。
如果多头奶牛在同一时刻都在挤奶,它们不能使用相同的桶。一头奶牛使用的桶在其挤奶结束后可以重新分配给其他奶牛。保证所有 si 和ti两两不同,即任意时刻至多只有一头奶牛开始或结束挤奶。储藏室中有编号为 1,2,3,… 的桶。每当第 i 头奶牛在时间 si开始挤奶时,Farmer John 会从当前空闲的桶中取出编号最小的 bi个桶。求 Farmer John 至少需要准备多少个桶,才能保证所有奶牛都能顺利完成挤奶。
输入格式
第一行包含一个整数 N,表示奶牛数量。
接下来 N 行,每行包含三个整数 si ,ti,bi,分别表示第 i 头奶牛开始挤奶的时间、结束挤奶的时间以及需要的桶数。
输出格式
输出一行一个整数,表示 Farmer John 至少需要准备的桶数
(2).U143763.[USACO10OCT] Soda Machine G(有一点点进阶)
题目:
题目描述
农夫约翰的 N 头奶牛在一条数轴上吃草,第 i 头奶牛的活动范围是闭区间 [Ai ,Bi],两个端点也算在范围之内。
为了满足奶牛们越来越高的要求,约翰买了一台汽水机,他可以把它装在 1∼10的九次方之间的任意一个整数位置上。
奶牛非常懒,一步都不想多走,只有当汽水机装在自己的活动范围之内时,这头奶牛才会去喝汽水。
让所有奶牛都满意通常是做不到的,请你求出最多能让多少头奶牛喝上汽水。
输入格式
第一行一个整数 N,表示奶牛的数量。
接下来 N 行,每行两个用空格分隔的整数 Ai和Bi 。
输出格式
一行一个整数,表示最多能有多少头奶牛的活动范围包含汽水机的位置。