1 条题解

  • 0
    @ 2025-8-24 21:36:53

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar GoldenFishX
    abs(__int128)|做题只会口胡QaQ|陌生人私信除学术外一律不回

    搬运于2025-08-24 21:36:53,当前版本为作者最后更新于2020-01-08 13:30:34,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    蒟蒻题解,有什么问题请大佬指出

    思路

    这题明显就是差分

    根据差分数组的定义: 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;
    } 
    
    • 1

    信息

    ID
    1250
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者