洛谷 2367题

这个题是一个简单的前缀和题目,单纯的考前缀和这个知识点。

不过这个题好像跟上一个做AcWing棋盘那个题有一些不一样,那个题是直接在原始数组上进行对差分数组的操作,这是因为上一个题原始全是0,就算是差分数组也是0,他们是相等的,所以在这个题一开始作者就直接在原数组上操作了,这是不对的。

需要先根据原数组求出来差分数组,然后再进行操作,最后再化为前缀和,这里的差分目的主要就是为了减少时间耗费。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 5000009
using namespace std;
int b[MAX];
int a[MAX];
void insert(int x,int y,int z){
    b[x]+=z;
    b[y+1]-=z;
}
int main(){
    int n,m;
    cin>>n>>m;
    int i;
    for(i=1;i<=n;i++){
        cin>>a[i];
    }
    int x,y,z;
    for(i=1;i<=n;i++)
    b[i]=a[i]-a[i-1];
    while(m--){
        cin>>x>>y>>z;
        insert(x,y,z);
    }
    for(i=1;i<=n;i++){
        b[i]+=b[i-1];
    }
    int min=101;
    for(i=1;i<=n;i++){
        if(b[i]         min=b[i];
    }
    cout<     return 0;
}

你可能感兴趣的:(算法)