作业介绍

一维差分复习+二维差分

#include <bits/stdc++.h>
using namespace std;
const int n=2e5+10;
int n, m,a[N],c[N],x,y;
//如果对原数组从x到y这段范围进行修改   +K
//那么对于差分数组而言 修改就是 c[x]+=K  c[y+1]-=K
// 1.先通过原数组构建差分数组
//c[i][j]=a[i][j]+a[i-1][j-1]-a[i-1][j]-a[i][j-1]
// 2.利用差分数组 快速的完成区间修改操作
//假设我们现在想对a数组的  左上角坐标是 (x,y) 右下角坐标是(xx,yy)   +K
//c[x][y]+=K   c[xx+1][y]-=K   c[x][yy+1]-=K c[xx+1][yy+1]+=k
// 3.还原原数组
for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
        a[i][j]=c[i][j]-a[i-1][j-1]+a[i-1][j]+a[i][j-1] 
    }
}
// 4.通过原数组 计算答案

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) {
        cin>>a[i];
        c[i]=a[i]-a[i-1];
    }
    while(m--){
        cin>>x>>y;
        c[x]++;
        c[y+1]--;
    }
    for(int i=1;i<=n;i++) a[i]=c[i]+a[i-1];
    for(int i=1;i<=n;i++) cout<<a[i]<<" ";
	return 0;
}

题目

认领作业后才可以查看作业内容。
状态
正在进行…
题目
24
开始时间
2026-1-31 0:00
截止时间
2026-3-31 23:59
可延期
24 小时