zoukankan      html  css  js  c++  java
  • 一维前缀和更新与维护

    现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作:

            操作一:将a[L]-a[R]内的元素都加上P

            操作二:将a[L]-a[R]内的元素都减去P

        最后询问a[l]-a[r]内的元素之和?
    n,m <= 1e6
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 
     6 using namespace std;
     7 const int N = 1e6+10;
     8 int n,m;
     9 int a[N],b[N];
    10 int main()
    11 {
    12     while(scanf("%d%d",&n,&m)!=EOF)
    13     {
    14         for(int i = 1; i <= n; i++)scanf("%d",&a[i]);
    15         int t,l,r,p;
    16 
    17         while(m--)
    18         {
    19             scanf("%d%d%d%d",&t,&l,&r,&p);
    20             if(t==1)
    21             {
    22                 b[l]-=p;
    23                 b[r+1]+=p;
    24             }
    25             else
    26             {
    27                 b[l]+=p;
    28                 b[r+1]-=p;
    29             }
    30         }
    31         for(int i = 1; i <= n; i++)
    32             b[i] += b[i-1];
    33         scanf("%d%d",&l,&r);
    34         long long sum = 0;
    35         for(int i = l; i <= r; i++)
    36             sum+=a[i]+b[i];
    37         cout<<sum<<endl;
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    webgl glsl
    javascript 分号理解
    流的理解 1
    javascript 排序
    phaser3 微信小游戏若干问题
    layabox 3d 入手
    phaser2 微信小游戏入手
    取整你知道几中办法?
    script 执行的三种方式
    cl查看类的内存布局
  • 原文地址:https://www.cnblogs.com/--lr/p/9379645.html
Copyright © 2011-2022 走看看