当前位置: 首页 > news >正文

差分优化效率

语文考试结束了,成绩还是一如既往地有问题。

题目描述

语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗?

输入格式

第一行有两个整数 n,p,代表学生数与增加分数的次数。

第二行有 n 个数,a1​∼an​,代表各个学生的初始成绩。

接下来 p 行,每行有三个数,x,y,z,代表给第 x 个到第 y 个学生每人增加 z 分。

输出格式

输出仅一行,代表更改分数后,全班的最低分。

输入输出样例

输入 #1复制

3 2
1 1 1
1 2 1
2 3 1

输出 #1复制

2

说明/提示

对于 40% 的数据,有 n≤103。

对于 60% 的数据,有 n≤104。

对于 80% 的数据,有 n≤105。

对于 100% 的数据,有 n≤5×106,p≤n,学生初始成绩 ≤100,z≤100。

咋一看,这题也能称普及题?这不随便写?

#include<stdio.h>

#include<windows.h>

int min=1e9;

int main(){

    int n,p;

    scanf("%d%d",&n,&p);

    int a[n+1];

    for(int i=1;i<=n;i++){

        scanf("%d",&a[i]);

    }

    for(int i=1;i<=p;i++){

        int x,y,z;

        scanf("%d%d%d",&x,&y,&z);

        for(int j=x;j<=y;j++){

            a[j]+=z;

        }

    }

    for(int i=1;i<=n;i++){

        if(min>a[i]){

            min=a[i];

        }

    }

    printf("%d",min);

    system("pause");

    return 0;

}

写的确实没什么问题,但是有一个样例超时了,咋说,优化效率咋优化,可以用差分,当然我是看的题解

根据差分数组的定义: d[i]=a[i]-a[i-1],可以发现,在d[x]上加上z,会让后面的学生全部加上z。↓

但这是把后面全部都加了,还要减掉一节,所以↓

把两个综合起来就是↓

所以每一次变化只要把d[x]+z,d[y+1]-z就好了。

因为 d[i]=a[i]-a[i-1]

所以 a[i-1]+d[i]=a[i]

最后再根据 a[i-1]+d[i]=a[i]输出每一个同学的分数

代码

#include<bits/stdc++.h>
using namespace std;
int d[5000001];//d[i]表示a[i]-a[i-1] 
int a[5000001];
int main()
{int n,p,x,y,z,i,min=1e9;cin>>n>>p;for(i=1;i<=n;i++){cin>>a[i];}for(i=1;i<=n;i++){d[i]=a[i]-a[i-1];}for(i=0;i<p;i++){cin>>x>>y>>z;d[x]+=z;d[y+1]-=z;}for(i=1;i<=n;i++){a[i]=a[i-1]+d[i];if(min>a[i]){min=a[i];}}cout<<min;return 0;
} 

相关文章:

  • 研发内控新规下的合规之道:维拉工时助力企业穿越IPO审查雷区
  • 深入浅出 MVVM:理解现代前端开发的核心架构模式
  • 贪心算法~~
  • Sand AI 开源 MAGI-1 视频生成模型,近屿智能带你领略无限扩展的 AI 视界
  • 《深入理解计算机系统》阅读笔记之第二章 信息的表示和处理
  • Apipost免费版、企业版和私有化部署详解
  • 保安员证考试的理论知识有哪些重点?
  • 计算机基础 原码反码补码问题
  • 一篇速成Linux 设置位 S(SetUID)
  • kafka课后总结
  • 简述:变更调查的历史情况
  • 定时任务:Quartz
  • Windows同步技术-使用命名对象
  • MySQL引擎分类与选择、SQL更新底层实现、分库分表、读写分离、主从复制 - 面试实战
  • 明远智睿SD2351核心板:以48元撬动AI视觉产业革命的“硬核引擎”
  • 队列基础和例题
  • 保障海外业务发展,U-Mail邮件中继提供高效安全的解决方案
  • [Mybatis-plus]
  • 数据结构------C语言经典题目(6)
  • protothread协程库实现非阻塞延时(无操作系统)
  • 暴涨96%!一季度“中国游中国购”持续升温,还有更多利好
  • 加总理:目前没有针对加拿大人的“活跃威胁”
  • 银川市长信箱被指“已读乱回”,官方通报:对相关责任人问责处理
  • 商务部:将积极会同相关部门加快推进离境退税政策的落实落地
  • 首映|《人生开门红》:段子背后都是案子
  • 西北大学党委副书记吕建荣调任西安财经大学党委书记