前缀和与差分 AcWing 797. 差分

曾经终败给现在 2023-09-28 11:15 49阅读 0赞

前缀和与差分 AcWing 797. 差分

原题链接

AcWing 797. 差分

算法标签

差分

思路

在这里插入图片描述
转自该题解

代码

  1. #include<bits/stdc++.h>
  2. #define int long long
  3. #define rep(i, a, b) for(int i=a;i<b;++i)
  4. #define Rep(i, a, b) for(int i=a;i>b;--i)
  5. using namespace std;
  6. const int N = 100005;
  7. int a[N], b[N];
  8. inline int read(){
  9. int s=0,w=1;
  10. char ch=getchar();
  11. while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
  12. while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
  13. return s*w;
  14. }
  15. void put(int x) {
  16. if(x<0) putchar('-'),x=-x;
  17. if(x>=10) put(x/10);
  18. putchar(x%10^48);
  19. }
  20. signed main(){
  21. ios::sync_with_stdio(false);
  22. cin.tie(0);
  23. cout.tie(0);
  24. int n=read(), m=read();
  25. rep(i, 1, n+1){
  26. a[i]=read();
  27. b[i]+=a[i];
  28. b[i+1]-=a[i];
  29. }
  30. while(m--){
  31. int l=read(), r=read(), c=read();
  32. b[l]+=c;
  33. b[r+1]-=c;
  34. }
  35. rep(i, 1, n+1){
  36. b[i]+=b[i-1];
  37. }
  38. rep(i, 1, n+1){
  39. printf("%lld ", b[i]);
  40. }
  41. return 0;
  42. }

y总代码

  1. #include <iostream>
  2. using namespace std;
  3. const int N = 100010;
  4. int n, m;
  5. int a[N], b[N];
  6. void insert(int l, int r, int c)
  7. {
  8. b[l] += c;
  9. b[r + 1] -= c;
  10. }
  11. int main()
  12. {
  13. scanf("%d%d", &n, &m);
  14. for (int i = 1; i <= n; i ++ ) scanf("%d", &a[i]);
  15. for (int i = 1; i <= n; i ++ ) insert(i, i, a[i]);
  16. while (m -- )
  17. {
  18. int l, r, c;
  19. scanf("%d%d%d", &l, &r, &c);
  20. insert(l, r, c);
  21. }
  22. for (int i = 1; i <= n; i ++ ) b[i] += b[i - 1];
  23. for (int i = 1; i <= n; i ++ ) printf("%d ", b[i]);
  24. return 0;
  25. }

总结学习

由于插入操作前后重复运用 ,可以封装为函数。

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,49人围观)

还没有评论,来说两句吧...

相关阅读

    相关 前缀

    前缀和: 前缀和是一种在数学和计算机科学中使用的概念。它指的是一个数组中每个元素之前(包括该元素)的所有元素的总和。 例如,对于数组 A = \[1, 2, 3, 4, 5

    相关 & 前缀

    我们从问题入手。   入门问题:有已赋值的 n 个数,现在有 m 个指令 操作 1: 每一次要求将第 k 个数加上 a; 操作 2: 查询第 k 个数字的值。 $1