首页 > 其他分享 >前缀和与差分

前缀和与差分

时间:2023-09-12 21:44:07浏览次数:30  
标签:const 前缀 int 差分 数组 y1 y2

1.前缀和

一维数组

#include<iostream>
using namespace std;
const int N=1e5+10;
int main()
{
    int n,m,a[N],sum[N]={0};
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        sum[i]=sum[i-1]+a[i];
    }
    while(m--)
    {
        int l,r;
        scanf("%d%d",&l,&r);
        printf("%d\n",sum[r]-sum[l-1]);
    }
}

二维数组

#include<iostream>
using namespace std;
const int N=1010;
int main()
{
    int n,m,q,a[N][N],sum[N][N]={0};
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            sum[i][j]=sum[i][j-1]+sum[i-1][j]+a[i][j]-sum[i-1][j-1];
        }
    }
    
    while(q--)
    {
        int x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        cout<<sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1]<<endl;
    }
}

 

2.差分

(前缀和的逆运算)

一维数组

数组a[ ]:a[0],a[1],a[2],a[3],a[4];     构造数组b[ ]:b[0],b[1],b[2],b[3],b[4];

a是b的前缀和数组,a[i]=b[0]+b[1]+...+b[i];

所以b[0]=a[0]; b[1]=a[1]-a[0]; b[2]=a[2]-a[1];

输入一个长度为 n 的整数序列。

接下来输入 m 个操作,每个操作包含三个整数 l,r,c 表示将序列中 [l,r] 之间的每个数加上 c。

请你输出进行完所有操作后的序列。

#include<iostream>
using namespace std;
const int N=1e5+10;
int main()
{
    int n,m,a[N],b[N]={0},c[N]={0};
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        b[i]=a[i]-a[i-1];
    }
    while(m--)
    {
        int l,r,c;
        scanf("%d%d%d",&l,&r,&c);
        b[l]+=c;b[r+1]-=c;
    }
    
     for(int i=1;i<=n;i++)
    {
        c[i]=b[i]+c[i-1];
        printf("%d ",c[i]);
    }
}

二维数组

#include<iostream>
using namespace std;
const int N=1010;
int main()
{
    int n,m,q,a[N][N],b[N][N]={0};
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            b[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1];
        }
    }
    int x1,y1,x2,y2,c;
    while(q--)
    {
        cin>>x1>>y1>>x2>>y2>>c;
        b[x1][y1]+=c;
        b[x2+1][y1]-=c;
        b[x1][y2+1]-=c;
        b[x2+1][y2+1]+=c;
    }
    
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+b[i][j];
            cout<<a[i][j]<<" ";
        }cout<<endl;
    }
}

 

标签:const,前缀,int,差分,数组,y1,y2
From: https://www.cnblogs.com/hello-205112/p/17697899.html

相关文章

  • UVA-1401 - Remember the Word -----Trie前缀树
    题意:给出N个不同单词和一个长字符串S。把这个字符串分解成若干个单词的连接(单词尅重复使用),问有多少种方法?分析:令d[i]表示从字符i开始的字符串的分解方案数,则d[i]=sum{d[i+len[x]]|单词x是S[i...len]的前缀};详看《算法竞赛入门经典》---刘汝佳--Page208.......
  • 前缀和 与 区间
    思想a~b区间可以转换为0~b-0~(a-1)用这种前缀和的思想,可以快速枚举所有合格条件的自区间。   classSolution:defsubarraySum(self,nums:List[int],k:int)->int:m=dict()m[0]=1cur,res=0,0fornum......
  • Poisson 方程有限差分(一维+二维)
    Poissonequationcanbewritternasfollows:\[\nabla\cdot[\epsilon(r)\nabla\phi(r)]=-q(p-n+N_D-N_A)\\\nabla\epsilon(r)\cdot\nabla\phi(r)+\epsilon(r)\nabla^2\phi(r)=-q(p-n+N_D-N_A)\]SincePoissonequationisbasedonthefinitedi......
  • 前缀和数组
    classPrefixSum{//前缀和数组privateint[]prefix;/*输⼊⼀个数组,构造前缀和/publicPrefixSum(int[]nums){prefix=newint[nums.length+1];//计算nums的累加和for(inti=1;i<prefix.length;i++){prefix[i]=prefix[i-1]+nums[i-1];}}/......
  • 树上差分
    树上差分与线性差分差不多,只不过是在树上进行差分,每次将两个点x和y的标志加1,将lca(x,y)和fa(lca(x,y))的标志减1,最后来一次深搜求和,就可以得到值了下面给出几道例题1.P3128[USACO15DEC]MaxFlowP解析:树上差分板子题,直接套班子,求完值后,求最大值即可代码:#include<bits/std......
  • 在方差分析摘要中,”F“、”P值“、”P值摘要“、 ”除手段非常显著性差异 (P < 0.00)
    在方差分析摘要中,“F”、“P值”、“P值摘要”、“除手段非常显著性差异(P<0.00)吗?”、"R平方"分别代表以下内容:“F”:F值是用来衡量组间差异与组内差异之比的统计量。F值越大,说明组间差异相对于组内差异越大,也就意味着不同组之间的差异更加显著。“P值”:P值是用来衡量观察......
  • 白盒AES和SM4实现的差分故障分析
    DFA攻击背景介绍传统的密码安全性分析环境被称为黑盒攻击环境,攻击者只能访问密码系统的输入与输出,但随着密码系统部署环境的多样化,该分析模型已经不能够反映实际应用中攻击者的能力。2002年,Chow等人[1]提出了白盒攻击环境的概念,该攻击环境中的攻击者对算法运行环境具备完全的控制......
  • 前缀树(Trie)的java实现
    前缀树prefixtree,又叫做trie。关键Feature如下:树形结构根节点为空结点包含Node[]nexts;//size26intisEnd;//有多少个字符串以当前字符结尾intpass;//多少个字符串经过了当前字符常用操作insertdeletesearch//字符串在前缀树中出现的次数prefi......
  • 差分
    目录差分例题综合运用差分例题综合运用思维+差分牛客小白77C小Why的商品归位......
  • 前缀和与差分
    前缀和一维前缀和公式:\[s[i]=s[i-1]+a[i]\]模板:constintN=10000+10;intn,m;inta[N],s[N];intmain(){ scanf("%d%d",&n,&m);for(inti=1;i<=n;i++){scanf("%d",&a[i]);s[i]=s[i-1]......