1,2,3WA,4,5TLE helps!

P2367 语文成绩

YouYou130 @ 2024-01-01 19:53:51

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n,p,n1,x,y,k,z,ji;
    cin>>n>>p;
    n1=n;
    long long a[n+1];
    for(;n1>0;n1--)
    {
        cin>>a[n1];
    }
    for(;p>0;p--)
    {
        cin>>x>>y>>z;
        if(x<y)
        {
            k=x;
            x=y;
            y=k;    
        }
        for(;x>=y;x--)
        {
            a[x]+=z;
        }
    }
    ji=a[1];
    for(long long i=2;i<n;i++)
    {
        if(a[i]<ji)
        {
            ji=a[i];
        }
    }
    cout<<ji;
    return 0;
}

by Shen_Linwood @ 2024-01-01 20:31:29

@YouYou130 我比较懒没有仔细看,不知道 WA 是怎么回事,但这题直接做是会超时的
这题的正解需要一个叫作差分的方法,您可以看看题解


by Shen_Linwood @ 2024-01-01 20:33:41

数据范围是到 5 \times 10^6,暴力进行加分操作是 O(n^2),肯定超时


by Shen_Linwood @ 2024-01-01 20:37:38

@YouYou130 哦,发现了一个问题,for(long long i=2;i<n;i++) 这里应该是 i<=n


by YouYou130 @ 2024-01-01 20:59:27

@Shen_Linwood 已改,但我没学过差分


by Shen_Linwood @ 2024-01-02 16:31:49

@YouYou130 还有一点,您写了倒序循环,但是加分操作的下标没有转成倒序

给一组 hack 数据,可以自测一下:

3 2
1 2 3
1 2 1
1 3 1

(正确答案是 3,您的代码输出 2

怎么倒序循环啊(恼


|