首页 > 编程语言 >基本前缀和算法:一维前缀和、二维前缀和、子矩阵和

基本前缀和算法:一维前缀和、二维前缀和、子矩阵和

时间:2023-09-21 21:22:04浏览次数:31  
标签:每行 前缀 int 询问 矩阵 整数 一维

1、一维前缀和

以AcWing.795为例,题目要求如下:

输入一个长度为N的整数序列。
接下来再输入m个询问,每个询问输入一对l, r。
对于每个询问,输出原序列中从第l个数到第r个数的和。

输入格式
第一行包含两个整数n和m。
第二行包含n个整数,表示整数数列。
接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。

输出格式
共m行,每行输出一个询问的结果。

#include <iostream>
#include <vector>
using namespace std;

const int N = 1e5 + 10;

int main() {
    int n, m;
    scanf("%d%d", &n, &m);

    int q[N], s[N];
    for (int i = 1; i <= n; i++) scanf("%d", &q[i]); 
    
    for (int i = 1; i <= n; i++) s[i] = s[i - 1] + q[i];
    
    int l, r;
    while (m--) {
        scanf("%d%d", &l, &r);
        printf("%d\n", s[r] - s[l - 1]);
    }
    
    return 0;
}

 

2、二维前缀和与子矩阵和

以AcWing.796为例,题目要求如下:

输入一个n行m列的整数矩阵,再输入q个询问,
每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。

对于每个询问输出子矩阵中所有数的和。

输入格式
第一行包含三个整数n,m,q。

接下来n行,每行包含m个整数,表示整数矩阵。

接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。

输出格式
共q行,每行输出一个询问的结果。

#include <iostream>
using namespace std;

const int N = 1010;
int a[N][N], s[N][N];

int main() {
    int n, m, q;
    scanf("%d%d%d", &n, &m, &q);
    
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            scanf("%d", &a[i][j]);
            s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];
        }
    }

    int x1, y1, x2, y2;
    while (q--) {
        scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
        printf("%d", s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1]);
    }
    
    return 0;
}

 

标签:每行,前缀,int,询问,矩阵,整数,一维
From: https://www.cnblogs.com/karinto/p/17720981.html

相关文章

  • 学习笔记418—删掉对称矩阵中的NaN,对角线为1【已解决!】
    问题:删掉对称矩阵中的NaN,对角线为1如下图矩阵A所示:解决办法:B=A+diag(NaN+zeros(1,length(A))); %将对角线改为NaNB(all(isnan(B),2),:)=[];%删除所有行为NaNB(:,all(isnan(B),1))=[];%删除所有列为NaNB(find(isnan(B)))=1;%再将对角线值改为1结果新矩......
  • 使用maskbarcode.jar实现一维条形码
    1.在项目的WEB-INF下的lib目录添加maskbarcode.jar2.配置web.xml文件,代码如下:1.<?xmlversion="1.0"encoding="UTF-8"?>2.<web-appversion="2.5"3.xmlns="http://java.sun.com/xml/ns/javaee"4.xmlns:xsi="h......
  • 力扣6.N 字形变换(压缩矩阵)
    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:PAHNAPLSIIGYIR之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请......
  • 力扣14.最长公共前缀
    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。 示例1:输入:strs=["flower","flow","flight"]输出:"fl" 示例2:输入:strs=["dog","racecar","car"]输出:""解释:输入不存在公共前缀。 ......
  • fortran求矩阵特征值
    拿来即用的求矩阵特征值的fortran程序摘自宋叶志《Fortran科学计算与工程》!-----------------------------------------------!input:A(n,n)为输入的n*n的矩阵,tol是迭代停止的阈值!output:namda为主特征值,u(n)为输入矩阵的n个特征值!-------------------------------......
  • windows批量删除指定前缀key
    直接上代码:del_keys_by_prefix.bat@echooffecho调用格式:[redis地址][redis密码][redis库号][待删除的key前缀带*]setkeysfile=redis-cached-keys.txtredis-cli-h%1-a%2-n%3keys%4>%keysfile%FOR/F%%iin(%keysfile%)DO(redis-cli-h%1-a%2-n%3de......
  • springboot中配置类型转换,设置开启矩阵变量
    2023-09-17packagecom.hh.springboot05.config;importcom.hh.springboot05.bean.Pet;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.core.convert.converter.Conver......
  • python系列教程215——列表解析与矩阵
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值......
  • 【设计模式】访问者模式Visitor:实现对象级别的矩阵结构
    (目录)访问者模式:一个原理看似很简单,但是理解起来有一定难度,使用场景相对较少的行为型模式:它能将算法与其所作⽤的对象隔离开来假如有这样⼀位⾮常希望赢得新客户的资深保险代理⼈。他可以拜访街区中的每栋楼,尝试向每个路⼈推销保险。所以,根据⼤楼内组织类型的不同,他可......
  • 矩阵之稀疏矩阵
    说明  稀疏矩阵是一种特殊类型的矩阵,其中大多数元素都为零。相反,稠密矩阵是大多数元素都非零的矩阵。  稀疏矩阵在很多实际应用中非常常见,因为许多现实世界的数据都具有高度的稀疏性,意味着只有少数几个元素是非零的,而其他元素都是零。使用稀疏矩阵可以有效地节省存储空......