一维前缀和,一维差分,二维前缀和,二维差分模板

一维前缀和:

题目:

题目描述

给定一个长度为n的数组a1,a2,....ana_1, a_2,....a_na1​,a2​,....an​.

接下来有q次查询, 每次查询有两个参数l, r.

对于每个询问, 请输出al+al+1+....+ara_l+a_{l+1}+....+a_ral​+al+1​+....+ar​

输入描述:

第一行包含两个整数n和q.

第二行包含n个整数, 表示a1,a2,....ana_1, a_2,....a_na1​,a2​,....an​.

接下来q行,每行包含两个整数   l和r.

1≤n,q≤1051 \le n, q \le 10^51≤n,q≤105
−109≤a[i]≤109-10^9 \le a[i] \le 10^9−109≤a[i]≤109
1≤l≤r≤n1 \le l \le r \le n1≤l≤r≤n

输出描述:

输出q行,每行代表一次查询的结果.

示例1

输入

复制

3 2
1 2 4
1 2
2 3

输出

复制

3
6

代码:

#include<bits/stdc++.h>
using namespace std;
long long qzh[100010];
int main(){
    int n,q,x;
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>x;
        qzh[i]=qzh[i-1]+x;
    }
    while(q--){
        int l,r;
        cin>>l>>r;
        cout<<qzh[r]-qzh[l-1]<<endl;
    }
}

一维差分:

题目:

题目描述

给你一个长度为n的正数数组a1,a2,...ana_1,a_2,...a_na1​,a2​,...an​.

接下来对这个数组进行m次操作,每个操作包含三个参数l,r,k,代表将数组中al,...ara_l,...a_ral​,...ar​部分都加上k。

请输出操作后的数组。

输入描述:

第一行包含两个整数n和m。
第二行包含n个整数表示a1,...ana_1,...a_na1​,...an​
接下来是m行,每行三个整数,分别代表每次操作的参数l,r,k.1≤n,m≤1051 \le n , m \le 10^51≤n,m≤105
−109≤a[i]≤109-10^9 \le a[i] \le 10^9−109≤a[i]≤109
1≤l≤r≤n1 \le l \le r \le n1≤l≤r≤n
−109≤k≤109-10^9 \le k \le 10^9−109≤k≤109

输出描述:

输出1行,表示m次操作后的a1,...ana_1,...a_na1​,...an​

示例1

输入

3 2
1 2 3
1 2 4
3 3 -2

输出

5 6 

代码:

#include<bits/stdc++.h>
using namespace std;
int a[100010];
long long cf[100010];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        cf[i]=a[i]-a[i-1];
    }
    int l,r,k;
    while(m--){
        cin>>l>>r>>k;
        cf[l]+=k;
        cf[r+1]-=k;
    }
    long long ans=0;
    for(int i=1;i<=n;i++){
        ans+=cf[i];
        cout<<ans;
        if(i!=n) cout<<' '; 
    }
}

二维前缀和:

题目:
 

题目描述

给你一个 n 行 m 列的矩阵 A ,下标从1开始。

接下来有 q 次查询,每次查询输入 4 个参数 x1 , y1 , x2 , y2

请输出以 (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和,

输入描述:

第一行包含三个整数n,m,q.接下来n行,每行m个整数,代表矩阵的元素接下来q行,每行4个整数x1, y1, x2, y2,分别代表这次查询的参数1≤n,m≤10001 \le n, m \le 10001≤n,m≤1000
1≤q≤1051 \le q \le 10^51≤q≤105
−109≤a[i][j]≤109-10^9 \le a[i][j] \le 10^9−109≤a[i][j]≤109
1≤x1≤x2≤n1 \le x_1 \le x_2 \le n1≤x1​≤x2​≤n
1≤y1≤y2≤m1 \le y_1 \le y_2 \le m1≤y1​≤y2​≤m

输出描述:

输出q行,每行表示查询结果。

示例1

输入

3 4 3
1 2 3 4
3 2 1 0
1 5 7 8
1 1 2 2
1 1 3 3
1 2 3 4

输出

8
25
32

代码:

#include<bits/stdc++.h>
using namespace std;
int a[1010][1010];
long long qzh[1010][1010];
int main(){
    int n,m,q;
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
            qzh[i][j]=a[i][j]+qzh[i-1][j]+qzh[i][j-1]-qzh[i-1][j-1];
        }
    }
    while(q--){
        int x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        cout<<qzh[x2][y2]-qzh[x1-1][y2]-qzh[x2][y1-1]+qzh[x1-1][y1-1]<<endl;
    }
}

二维差分:

题目 :
 

题目描述

给你一个n行m列的矩阵,下标从1开始。
接下来有q次操作,每次操作输入5个参数x1, y1, x2, y2, k
表示把以(x1, y1)为左上角,(x2,y2)为右下角的子矩阵的每个元素都加上k,
请输出操作后的矩阵。

 

输入描述:

第一行包含三个整数n,m,q.
接下来n行,每行m个整数,代表矩阵的元素

接下来q行,每行5个整数x1, y1, x2, y2, k,分别代表这次操作的参数

1≤n,m≤10001\le n,m \le 10001≤n,m≤1000
1≤q≤1051\le q \le 10^51≤q≤105
1≤x1≤x2≤n1\le x1 \le x2 \le n1≤x1≤x2≤n
1≤y1≤y2≤m1\le y1 \le y2 \le m1≤y1≤y2≤m
−109≤矩阵中的元素≤109-10^9 \le 矩阵中的元素 \le 10^9−109≤矩阵中的元素≤109

输出描述:

输出n行,每行m个数,每个数用空格分开,表示这个矩阵。

示例1

输入

2 3 4
1 2 3
4 5 6
1 1 2 2 3
1 2 2 3 -1
1 1 1 3 4
1 1 2 1 1

输出

9 8 6
8 7 5

代码:

#include<bits/stdc++.h>
using namespace std;
int a[1010][1010];
long long cf[1010][1010];
int main(){
    int n,m,q;
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    while(q--){//构造差分数组
        int x1,y1,x2,y2,k;
        cin>>x1>>y1>>x2>>y2>>k;
        cf[x1][y1]+=k;
        cf[x1][y2+1]-=k;
        cf[x2+1][y1]-=k;
        cf[x2+1][y2+1]+=k;
    }
    for(int i=1;i<=n;i++){//差分——前缀和(不明白)
        for(int j=1;j<=m;j++){
            cf[i][j]=cf[i][j]+cf[i][j-1]+cf[i-1][j]-cf[i-1][j-1];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cout<<cf[i][j]+a[i][j];
            if(j!=m) cout<<' ';
            else cout<<endl;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/669127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK和Spring的SPI机制原理分析

目录 一、JDK 二、Spring框架介绍 三、SPI机制原理 一、JDK JDK是Java Development Kit的缩写&#xff0c;是Java开发工具包的意思。它是用于开发Java应用程序和运行Java程序的软件包。JDK包含了Java编译器&#xff08;javac&#xff09;和Java虚拟机&#xff08;JVM&#…

【快速上手QT】01-QWidgetQMainWindow QT中的窗口

总所周知&#xff0c;QT是一个跨平台的C图形用户界面应用程序开发框架。它既可以开发GUI程序&#xff0c;也可用于开发非GUI程序&#xff0c;当然我们用到QT就是要做GUI的&#xff0c;所以我们快速上手QT的第一篇博文就讲QT的界面窗口。 我用的IDE是VS2019&#xff0c;使用QTc…

【NodeJS】005- MongoDB数据库

1.简介 1.1 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/ 1.2 数据库是什么 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的 应用程序 1.3 数据库的作用 数据库的主要作用就是…

Python实现排序算法

目录 一&#xff1a;快速排序 二&#xff1a;合并排序 三&#xff1a;冒泡排序 四&#xff1a;插入排序 五&#xff1a;选择排序 一&#xff1a;快速排序 def quicksort(arr): if len(arr) < 1: return arr pivot arr[len(arr) // 2] le…

Vu3中使用h函数

Vu3中使用h函数 h函数优缺点h函数介绍使用 h函数优缺点 h函数介绍 格式 h函数接受三个参数 依次是创建的节点,节点属性,节点内容 优点: 跳过了模板编译,性能高 缺点: 学习成本略高 使用 <template><div><div>h函数</div><table border"1…

【 BUUCTFmisc--爱因斯坦】

这题比较简单&#xff0c;but 对于macOS 的一个 bug 是无法右键查看图片的详细备注&#xff0c;这题就是例子&#xff0c;导致隐藏的密码看不见 Windows 可以看到。具体解决办法是用 exiftool 工具 brew install exiftool exiftool -verbose image.jpg 找到 XPComment 栏&am…

搭建自己的私服 maven 仓库

申明&#xff1a;本文章所使用docker-compose配置文件纯属学习运用&#xff0c;非商用如有雷同请联系本人协调处理。 一、配置docker-compose.yml文件 # 指定docker-compose的版本 version: 3 services: nexus: container_name: nexus_container image: sonatype/nex…

智能指针——浅析

智能指针 本人不才&#xff0c;只能将智能指针介绍一下&#xff0c;无法结合线程进行深入探索 介绍及作用 在异常产生进行跳转时&#xff0c;通过栈帧回收进行内存释放&#xff0c;防止内存泄漏 基于RAII思想可以创建出只能指针 RAII(Resource Acquisition Is Initializatio…

能够在线预览的组件库(支持vue2/3)

文档地址:https://501351981.github.io/vue-office/examples/docs/guide/ //docx文档预览组件&#xff08;只支持在线预览 docx格式的文件&#xff09; npm install vue-office/docx//excel文档预览组件 npm install vue-office/excel//pdf文档预览组件 npm install vue-offic…

Nicn的刷题日常之 有序序列判断

目录 1.题目描述 描述 输入描述&#xff1a; 输出描述&#xff1a; 示例1 示例2 示例3 2.解题 1.题目描述 描述 输入一个整数序列&#xff0c;判断是否是有序序列&#xff0c;有序&#xff0c;指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。 数据…

ROM/FLASH/RAM

ROM (Read Only Memory)程序存储器: 不能擦除&#xff0c;用于存储各种固化程序和数据&#xff0c;在单片机中用来存储程序数据及常量数据或变量数据&#xff0c;凡是c文件及h文件中所有代码、全局变量、局部变量、存储在ROM中 FLASH 存储器&#xff1a; Flash 存储器&#xf…

素数取りゲーム(线性筛、连续异或、博弈论

小结博弈论题型素数的特性连续异或 代码 题目&#xff1a;素数取りゲーム 临摹的题解&#xff1a;AT_ttpc2019d题解 这题真的看题解都断断续续看了两天才看懂这一个题解 : ( 小结 本题一下遇到了我好多没了解过的点&#xff0c;博弈论、素数的一些特性&#xff0c;连续异或的…

Python中的while循环,知其然知其所以然

文章目录 while循环结构1.用循环打印1 ~ 100步骤解析2. 1 ~ 100的累加和3.死循环1. 用死循环的方法实现 1 ~ 100累加和 4. 单向循环(1)打印 一行十个小星星*(2)通过打印一个变量的形式,展现一行十个小星星(3)一行十个换色的星星 ★☆★☆★☆★☆★☆(4)用一个循环,打印十行十列…

Matlab建立TCP/IP链接

参考&#xff1a; MATLAB实现tcp连接 - 知乎 (zhihu.com) MATLAB &#xff1a;【11】一文带你读懂serialport串口收发原理与实现_matlab serialport-CSDN博客 Transition Your Code to serialport Interface - MATLAB & Simulink - MathWorks 中国 Transition Your Code…

Zookeeper相关面试准备问题

Zookeeper介绍 Zookeeper从设计模式角度来理解&#xff0c;是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心的数据&#xff0c;然后接受观察者的注册&#xff0c;一旦这些数据的状态发生了变化&#xff0c;Zookeeper就负责通知已经在Zoo…

DockerUI如何部署结合内网穿透实现公网环境管理本地docker容器

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

计算机网络——02网络边缘

网络边缘 网络结构 网络边缘&#xff1a; 主机应用程序&#xff08;客户端和服务器&#xff09; 网络核心 互联着的路由器网络的网络 接入网、物理媒体 有线或无线通信链路 网络边缘 端系统&#xff08;主机&#xff09; 运行应用程序 客户/服务器模式&#xff08;C/S模式…

windows10忘记密码的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

杨中科 ASP.NETCORE 高级14 SignalR

1、什么是websocket、SignalR 服务器向客户端发送数据 1、需求&#xff1a;Web聊天;站内沟通。 2、传统HTTP&#xff1a;只能客户端主动发送请求 3、传统方案&#xff1a;长轮询&#xff08;Long Polling&#xff09;。缺点是&#xff1f;&#xff08;1.客户端发送请求后&…

git 合并多条提交记录

我要合并多条提交记录&#xff08;合并前7条为一条&#xff09;&#xff0c;实现如下效果&#xff1a; 使用git rebase // 查看前10个commit git log -10 // 将7个commit压缩成一个commit&#xff1b;注意&#xff1a;vim编辑器 git rebase -i HEAD~4 // add已经跟踪的文件 g…