首页 > 其他分享 >洛谷题单指南-前缀和差分与离散化-P3397 地毯

洛谷题单指南-前缀和差分与离散化-P3397 地毯

时间:2024-07-26 11:31:01浏览次数:9  
标签:x1 洛谷题 差分 x2 二维 P3397 y1 y2

原题链接:https://www.luogu.com.cn/problem/P3397

题意解读:给定一个n*n的矩阵,每个元素初始值为0,再将m个子矩阵中的元素都增加1,统计每个元素最终的值。

解题思路:

1、暴力法

枚举每一个子矩阵,将对应元素值加1,时间复杂度为1000^3,不可行。

2、二维差分

对于给定二维数组s[][],给指定区间左上角(x1,y1)右下角(x2,y2)每一个元素增加z,可以借助二维差分完成。

什么是二维差分?

可以理解为二维前缀和的逆运算,设s[][]为a[][]的二维前缀和数组,那么a[][]就是s[][]的差分数组。

如何计算二维差分?

如图所示,矩阵每个格子代表a[][],有颜色的区块代表前缀和s[][],红色区域为s[i][j],绿色区域为s[i-1][j],蓝色区域为s[i][j-1],黑色区域为s[i-1][j-1]

要计算a[i][j],则有a[i][j] = s[i][j] - s[i-1][j] - s[i][j-1] + s[i-1][j-1]

如何给数组s[][]指定区间左上角(x1,y1)右下角(x2,y2)每一个元素增加z?

如图所示,矩阵每个元素表示a[][],要给前缀和数组s[][]区间(x1,y1)(x2,y2)每个元素增加z

第一步:a[x1][y1] += z,这样一来,红色区域内所有的s[][]都增加了z

第二步:a[x2+1][y1] -= z,这样一来,蓝色区域内的所有s[][]都减去了z

第三步:a[x1][y2+1] -= z,这样一来,绿色区域内所有的s[][]都减去了z

第四步:a[x2+1][y2+1] += z,这样一来,蓝色区域、绿色区域、黄色区域内所有的s[][]都保持不变,既不增加z又不减少z

此时,黑色区域内的s[][]都增加了z,即(x1,y1)(x2,y2)区域的每一个s[][]都增加了z

以上操作时间复杂度为O(1)。

3、完整流程

第一步:计算二维差分数组(由于初始数组元素都是0,因此差分数组元素也是0,此步骤可以省去)

第二步:通过二维差分数组,执行区间元素加1操作

第三步:通过二维前缀和还原数组

第四步:输出答案

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 1005;

int n, m;
int s[N][N], a[N][N];

int main()
{
    cin >> n >> m;
    int x1, y1, x2, y2;
    for(int i = 1; i <= m; i++)
    {
        cin >> x1 >> y1 >> x2 >> y2;
        a[x1][y1] += 1;
        a[x2 + 1][y1] -= 1;
        a[x1][y2 + 1] -= 1;
        a[x2 + 1][y2 + 1] += 1;
    }

    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];
            cout << s[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

 

标签:x1,洛谷题,差分,x2,二维,P3397,y1,y2
From: https://www.cnblogs.com/jcwy/p/18324678

相关文章

  • 洛谷题单指南-前缀和差分与离散化-P2367 语文成绩
    原题链接:https://www.luogu.com.cn/problem/P2367题意解读:对于数组s[],给指定q个区间[x,y]里每个数增加z,计算操作之后最小的数。解题思路:1、暴力做法对于每一个区间[x,y],枚举给每一个数增加z,然后遍历查找最小值,总体时间复杂度为O(N^2),不可行。2、一维差分对于给指定区间[x,......
  • 【模拟电子技术基础】差分放大电路——学生实验报告
        自己(大学生)在校做的实验报告,可借鉴使用,下载资源后可自行增删内容,或按照个人喜好优化排版。内容包括差分放大电路相关的实验目的、实验原理、实验过程及数据记录与处理分析、实验结论等。一、实验目的1.加深对差分放大电路性能及特点的理解2.学习差分放大电路主......
  • 洛谷题单指南-前缀和差分与离散化-P1314 [NOIP2011 提高组] 聪明的质监员
    原题链接:https://www.luogu.com.cn/problem/P1314题意解读:计算m个检验值之和,计算与s差值绝对值的最小值。解题思路:1、首先要搞懂检验值是如何计算的如上图,对于每一个区间的检验值yi,表示为:yi="该区间重量>=W的矿石个数" ✖️"该区间>=W的矿石价值之和"检验值y即所有yi(1<=......
  • 洛谷题单指南-前缀和差分与离散化-P8218 【深进1.例1】求区间和
    原题链接:https://www.luogu.com.cn/problem/P8218题意解读:对于数组a[N],给定m个区间l~r,求每个区间所有元素之和。解题思路:先思考暴力做法:对于每一个区间[l,r],累加a[l]~a[r]所有元素,时间复杂度最坏为10^5*10^4,不可行。一维前缀和:设s[N]是a[N]的前缀和数组,即对于每一个s[i......
  • [NOIP2008 提高组] 笨小猴(洛谷题号P1125)
    [NOIP2008提高组]笨小猴题目描述笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的......
  • luoguT342340 差分 - 谁多谁闪亮
    差分-谁多谁闪亮题目背景外星人来地球游玩,他们到达某个贫困的小县城,这里有n*m个小村庄整齐排列着,外星人一看是个矩形排列,一下子来了兴趣,想在这里游玩,但无奈,已经天黑,没有一点灯光,他们只能使用法术,将某些村庄照亮。说来外星人也是很有礼貌的,他们也模仿着村庄的样子,每次给某些a......
  • 差分
    //洛谷p2367语文成绩一维差分#include<iostream>usingnamespacestd;constintN=10000010;inta[N],b[N];intn;intp;voidinsert(intl,intr,intc){ b[l]+=c; b[r+1]-=c;}intmain(){ cin>>n>>p; for(inti=1;i<=n;i......
  • 【图论】【模板】差分约束系统
    差分约束系统差分约束系统是将不等式组的问题转化为图论问题。前置知识判断负环例题P5960【模板】差分约束算法思路我们将\(x_u-x_v\ley_u\)换为\(x_u\lex_v+y_u\)。然后我们建立一条连接\(v,u\)(注意是\(v,u\)不是\(u,v\))权值为\(y_u\)的边。我们发......
  • 算法基础课第一章(中)高精度+前缀和+差分
    一、高精度(一)使用高精度的原因在计算机中处理非常大或非常小的数值时,确保计算结果的精确性和准确性。在特定情况下,可以自己实现高精度计算的数据结构和算法,例如使用字符串或数组来表示大数,并实现基本的加、减、乘、除操作。(二)高精度加法1、方法(1)描述:从最低位开始加法计算......
  • 高速计数模块(差分)在软件组态说明
    本章主要介绍XD系列远程IO的适配器配合IO模块与目前工业主流PLC配置1、通信连接图,如图5-1所示。图5-1通信连接图2、硬件配置如表5-1所示3、安装XML描述文件安装XML描述文件到TwinCAT3中,如图5-2所示。示例默认文件夹为(C:\TwinCAT\3.1\Config\Io\EtherCAT)图5-2安装XML......