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

前缀和与差分专题

时间:2025-01-05 23:01:45浏览次数:3  
标签:专题 前缀 int x1 差分 y1 vector x2 y2

领地选择

(二维前缀和)

作为在虚拟世界里统帅千军万马的领袖,小 Z 认为天时、地利、人和三者是缺一不可的,所以,谨慎地选择首都的位置对于小 Z 来说是非常重要的。

首都被认为是一个占地 C×C 的正方形。小 Z 希望你寻找到一个合适的位置,使得首都所占领的位置的土地价值和最高。

第一行三个整数 N,M,CN,M,C,表示地图的宽和长以及首都的边长。

接下来 NN 行每行 MM 个整数,表示了地图上每个地块的价值。价值可能为负数。

输入数据

3 4 2
1 2 3 1
-1 9 0 2
2 0 1 1

 输出数据

1 2

AC代码:

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

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	int n, m, c;
	cin >> n >> m >> c;
	vector<vector<int>> a(n+1, vector<int>(m+1, 0)), g(n+1, vector<int>(m+1,0));
	for (int i=1; i<=n; i++){
		for (int j = 1; j<=m; j++){
			cin >> a[i][j];
			g[i][j] = g[i][j-1]+g[i-1][j]-g[i-1][j-1]+a[i][j];
		}
	}
	int max = -1e9, mai=0,maj=0;
	for (int i = c; i<=n; i++){
		for (int j = c; j <=m; j++){
			int ans = g[i][j]-g[i][j-c]-g[i-c][j]+g[i-c][j-c];
			if (ans > max){
				max = ans;
				mai = i-c+1;
				maj = j-c+1;
			}
		}
	}
	cout << mai << " " << maj << endl;
	return 0;
}

地毯 

(二维差分)

在 n×n 的格子上有 mm 个地毯。

给出这些地毯的信息,问每个点被多少个地毯覆盖。

第一行,两个正整数 n,mn,m。意义如题所述。

接下来 m 行,每行两个坐标 (x1,y1) 和 (x2,y2),代表一块地毯,左上角是 (x1,y1),右下角是 (x2,y2)。

输入数据

5 3
2 2 3 3
3 3 5 5
1 2 1 4

 输出数据

0 1 1 1 0
0 1 1 0 0
0 1 2 1 1
0 0 1 1 1
0 0 1 1 1

注意差分方式为下表,以5*5中的点一(1,1),点二(3,3)为例

12345
11-1
2
3
4-11
5

 这里a的数组为什么要开n+2呢,因为当x2,y2为边界时得在它+1的位置-1.

AC代码:

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

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	int n, m;
	cin >> n >> m;
	vector<vector<int>> a(n+2, vector<int>(n+2, 0)), g(n+2, vector<int>(n+1, 0));
	for (int i = 0; i<m; i++){
		int x1, x2, y1, y2;
		cin >> x1 >> y1 >> x2 >> y2;
		a[x1][y1]++;
		a[x2+1][y1]--;
		a[x1][y2+1]--;
		a[x2+1][y2+1]++;
	}
	for (int i = 1; i<=n; i++){
		for (int j = 1; j<=n; j++){
			g[i][j] = g[i-1][j]+g[i][j-1]-g[i-1][j-1]+a[i][j];
			cout << g[i][j] << " \n"[j==n];
		}
	}
	
	return 0;
}

标签:专题,前缀,int,x1,差分,y1,vector,x2,y2
From: https://blog.csdn.net/wirepuller_king/article/details/144946318

相关文章

  • 线段树进阶练习专题
    小白逛公园题目大意:求一段区间里最大子段和思路:有空补(code:#include<bits/stdc++.h>usingnamespacestd;constintMAXN=500100;intm,n;inta[MAXN];inlineintread(){ intx=0,f=1; charch=getchar(); while(ch>'9'||ch<'0'){ if(ch==&#......
  • 一维差分
    假设现在对如下数组进行差分求解:123456 假设要对区间位置2到3的位置进行统一的加2操作, 再对位置3到5进行统一的减6操作1#include<iostream>2usingnamespacestd;34intmain(){5intn,m,num[10],diff[10];6cin>>n>>m;//输入的n表示数......
  • C++ 前缀和
    有一个数组{2,1,3,6,4},询问三次结果:a[5]={2,1,3,6,4}1.数组第1到第2个元素的和是多少?2.数组第1到第3个元素的和是多少?3.数组第2到第4个元素的和是多少?原始方法(无前缀和):1#include<iostream>2#include<stdio.h>3usingnamespacestd;4intmain(){5......
  • C++前缀和
    有一个数组{2,1,3,6,4},询问三次结果:a[5]={2,1,3,6,4}1.数组第1到第2个元素的和是多少?2.数组第1到第3个元素的和是多少?3.数组第2到第4个元素的和是多少?  没有用前缀和的原始用法:1#include<iostream>2#include<stdio.h>3usingnamespacestd;4intma......
  • 前缀和和差分
    前缀和(PrefixSum)和差分(DifferenceArray)是处理数组问题时常用的两种数据结构或算法技巧,它们可以加速某些类型的查询,尤其是在涉及数组元素累积和或变化量的情况下。前缀和(PrefixSum)前缀和是一种将数组元素的累积和存储在新数组中的技术。对于一个数组a,其前缀和数组prefixS......
  • 改进的多目标差分进化算法在电力系统环境经济调度中的应用(Python代码实现)【电气期刊论
    目录 1电力系统环境经济调度数学模型电力系统环境经济调度问题概述多目标差分进化算法的应用应用研究的意义2  改进的多目标差分进化算法电力系统环境经济调度的基本概念多目标差分进化算法简介改进的多目标差分进化算法应用研究3Python代码实现3.1结果3.2P......
  • 【专题】2025年中国游戏产业趋势及潜力分析报告汇总PDF洞察(附原数据表)
     原文链接:https://tecdat.cn/?p=38614游戏产业作为文化创意与数字技术深度融合的领域,在当代社会经济格局中占据着日益重要的地位。本报告汇总聚焦2025年中国游戏产业,深入剖析其现状与趋势。近年来,中国游戏产业成绩斐然,国内和海外市场收入双创历史新高,细分市场多点开花。《伽......
  • BUGAWAY算法小抄-差分数组
    BUGAWAY算法小抄-差分数组什么是差分数组?差分数组的思想是通过对原始数组进行处理,得到一个新的数组(差分数组),利用该数组来高效地进行区间更新操作。具体来说,差分数组记录的是相邻元素之间的差值,而不是原始数组的元素本身。差分数组的原理1.差分数组的构造:假设有一个数组A=......
  • 如何在梯度计算中处理bf16精度损失:混合精度训练中的误差分析
    如何在梯度计算中处理bf16精度损失:混合精度训练中的误差分析在现代深度学习训练中,为了加速计算并节省内存,越来越多的训练任务采用混合精度(MixedPrecision)技术,其中常见的做法是使用低精度格式(如bf16或fp16)进行前向传播和梯度计算,而使用高精度格式(如fp32)进行参数更新......
  • 【优选算法 & 分治】深入理解分治算法:分治算法入门小专题详解
             快速排序算法   (1)快速排序法       (2) 快排前后指针     (3)快排挖坑法   颜色分类  题目解析    算法原理   算法原理和移动零非常相似  简述移动零的算法原理   ......