WA求助
查看原帖
WA求助
804115
yzm0325楼主2023/2/11 17:56
#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 5000010;
int a[maxn], dif[maxn], ans[maxn];
int n, p, minn = 200000000;
void differ() { // 差分
    for(int i = 1; i <= n; i++) {
        if(i == 1) dif[i] = a[i];
        else dif[i] = a[i] - a[i - 1];
    }
    return;
}
void prefix() { // 前缀和
    for(int i = 1; i <= n; i++) ans[i] = dif[i] + ans[i - 1]; // 这样也不用担心越界,数组开得大
    return;
}
int main() {
	memset(a, 0, sizeof(a));
	memset(dif, 0, sizeof(dif));
	memset(ans, 0, sizeof(ans));
    cin >> n >> p;
    for(int i = 1; i <= n; i++) cin >> a[i];
    differ(); // 差分初始化
    int x, y, z;
    for(int i = 1; i <= p; i++) {
        cin >> x >> y >> z;
        dif[x] += z, dif[y] -= z; // 差分的好处,直接降一个循环
    }
    prefix();
    for(int i = 1; i <= n; i++) if(ans[i] < minn) minn = ans[i];
    cout << minn;
    return 0;
}

为什么不对呢?

2023/2/11 17:56
加载中...