首页 > 其他分享 >洛谷题单指南-前缀和差分与离散化-P2367 语文成绩

洛谷题单指南-前缀和差分与离散化-P2367 语文成绩

时间:2024-07-26 09:41:45浏览次数:15  
标签:前缀 int 洛谷题 差分 数组 P2367 增加

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

题意解读:对于数组s[],给指定q个区间[x, y]里每个数增加z,计算操作之后最小的数。

解题思路:

1、暴力做法

对于每一个区间[x, y],枚举给每一个数增加z,然后遍历查找最小值,总体时间复杂度为O(N^2),不可行。

2、一维差分

对于给指定区间[x, y]中每一个数增加z的操作,可以借助差分数组来优化。

什么是差分?

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

如何计算差分?

也就是已知s[],要计算a[],由于s[i] = a[1] + ... + a[i],s[i - 1] = a[1] + ... + a[i - 1],因此有

a[i] = s[i] - s[i - 1]

如何给s[]数组区间[x, y]每个数增加z?

第一步:给a[x]增加z,由于s[]是a[]的前缀和,因此从s[x]开始到最后每个数都增加了z

第二步:给a[y + 1]减去z,由于s[]是a[]的前缀和,因此从s[y + 1]开始到最后每个数都恢复之前状态,既不增加z也不减少z

这样一来,就只有s[x] ~ s[y]之间每一个数都增加了z

3、完整流程

第一步:计算差分数组

第二步:针对差分数组进行区间加数操作

第三步:重新计算前缀和数组,统计最小值

100分代码:

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

const int N = 5000006;

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

int main()
{
    scanf("%d%d", &n, &p);
    for(int i = 1; i <= n; i++)
    {
        scanf("%d", &s[i]);
        a[i] = s[i] - s[i - 1]; //计算差分数组
    }

    int x, y, z;
    for(int i = 1; i <= p; i++)
    {
        scanf("%d%d%d", &x, &y, &z);
        //给区间[x,y]每个数增加z
        a[x] += z;
        a[y + 1] -= z;
    }
    
    int ans = 1e9;
    for(int i = 1; i <= n; i++)
    {
        s[i] = s[i - 1] + a[i]; //用前缀和还原数组
        ans = min(ans, s[i]);
    }
    cout << ans;
    return 0;
}

 

标签:前缀,int,洛谷题,差分,数组,P2367,增加
From: https://www.cnblogs.com/jcwy/p/18323783

相关文章

  • 【模拟电子技术基础】差分放大电路——学生实验报告
        自己(大学生)在校做的实验报告,可借鉴使用,下载资源后可自行增删内容,或按照个人喜好优化排版。内容包括差分放大电路相关的实验目的、实验原理、实验过程及数据记录与处理分析、实验结论等。一、实验目的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......
  • XD5012高速计数模块(差分)功能与选型及安装说明
    Profinet远程IO模块:XD5012高速计数模块(差分)功能与安装说明XD5012高速计数模块(差分)具有出色的计数功能,能够快速而精确地统计输入信号的数量。无论是频率计数、脉冲宽度测量还是时间测量,都能够轻松完成。这给各种应用场景提供了极大的便利,比如工业自动化控制。 本文将详细介绍X......