首页 > 【模板】差分
头像 静寂旮旯
发表于 2022-05-05 10:46:46
解题思路: 分析问题,最直观的办法是暴力,但是在数据量1E5的情况下时间复杂度是达不到要求的。 引入差分数组,降低时间复杂度,对于a1,...,ana_1,...,a_na1​,...,an​构造差分数组cf1,...,cfncf_1,...,cf_ncf1​,...,cfn​对于cfi=a 展开全文
头像 其实是牛哥
发表于 2021-10-19 15:19:39
【模板】差分 难度:2星 差分模板题。如果每次操作都是 O(n)O(n)O(n) 复杂度进行模拟的话,肯定会超时。 我们观察到,对于一个数组,如果让 a[l]a[l]a[l] 加 kkk ,a[r+1]a[r+1]a[r+1] 减 kkk ,做一个前缀和之后,相当于 [l,r][l,r][l,r] 展开全文
头像 fred-coder
发表于 2021-12-15 00:35:09
利用差分数组 diff 减少区间操作的时间复杂度, diff 生成如下: diff[0] = data[0] for i in range(1, len(data)): # 后一个元素与前一个元素相减 diff[i] = data[i] - data[i - 1] 之后可根据 di 展开全文
头像 我只喝白开水
发表于 2025-04-17 16:11:35
#include <bits/stdc++.h> #define int long long #define endl '\n' #define LCHILD(p) (((p) << 1) | 1) #define RCHILD(P) (((p) + 1) << 展开全文
头像 青木阳菜
发表于 2025-04-17 16:21:42
(挣牛币用的)先开差分数组,再这样那样,最后求出差分数组的前缀和就好了 #include <bits/stdc++.h> using namespace std; #define int long long signed main() { int n, m; cin &g 展开全文
头像 kkkyd
发表于 2024-11-22 12:53:07
#include <bits/stdc++.h> using namespace std; //差分数组 using ll=long long; int main() { int n,m; cin>>n>>m; vector<ll&g 展开全文
头像 Sousey
发表于 2022-04-25 11:50:40
看了一下榜一的操作,感觉很棒 把原本的数据a和变化数据k做成两个数组a[]和,aa[]然后对变化数据k处理: for(int i = 1; i <= m ;i++){ cin >> l >> r >> k; aa[l]+=k; 展开全文
头像 Kato_Shoko
发表于 2024-11-21 19:29:35
#include <iostream> #include <queue> #include <map> #include <set> #include <cmath> #include <cstring> #include &l 展开全文
头像 xqxls
发表于 2021-10-29 18:44:35
题意整理。 给定一个长度为n的正整数数组,对这个数组进行m次操作,每次操作给定左右边界l、r,以及一个参数k,将数组中下标在l到r范围内所有数加上k。 求k次操作之后的数组。 方法一(差分数组) 1.解题思路 首先定义一个差分数组,在每次操作中,标记对应增量的边界。 在操作完成之后,遍历差分数 展开全文
头像 Mag1c0nch
发表于 2024-11-21 17:16:13
使用差分数组维护区间修改即可 #include <bits/stdc++.h> using namespace std; #define int long long const int N = 1e5 + 5; int __t = 1, n, m, l, r, k; int a[N], 展开全文