题解分享
题解分享简介
一维差分 - 题解
```cpp
// https://dashoj.com/d/lqbproblem/p/193
#include <bits/stdc++.h>
#define N 100010
using namespace std;
typedef long long ll;
ll n, m;
vector<ll> vl(N, 0);
vector<ll> cf(N, 0);
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> vl[i];
for (int i = 1; i <= n; i++) cf[i] = vl[i] - vl[i - 1];
while (m--) {
ll l, r, c;
cin >> l >> r >> c;
cf[l] += c;
cf[r + 1] -= c;
}
for (int i = 1; i <= n; i++) vl[i] = cf[i] + vl[i - 1];
for (int i = 1; i <= n; i++) cout << vl[i] << ' ';
cout << endl;
return 0;
}
```
查看全文
1
0
1
2
一维差分 - 题解
```
n, m = map(int, input().split())
arr = [0] + list(map(int, input().split()))
diff = [0] * (n + 2)
for i in range(1, n + 1):
diff[i] = arr[i] - arr[i - 1]
for _ in range(m):
l, r, c = map(int, input().split())
diff[l] += c
diff[r + 1] -= c
for i in range(1, n + 1):
diff[i] += diff[i - 1]
print(*diff[1: -1])
```
查看全文
1
0
0
5
一维差分 - 题解
```
#include
using namespace std;
#define int long long
#define endl '\n'
int n,m;
const int N = 1e5 + 10;
int a[N],d[N];
int sum[N];
void solve(){
cin >> n >> m;
for(int i = 1;i <= n;i++){
cin >> a[i];
}
while(m--){
int l,r,c;
cin >> l >> r >> c;
d[l] += c;d[r+1] -= c;
}
for(int i = 1;i <= n;i++){
sum[i] = sum[i-1] + d[i];
}
for(int i = 1;i <= n;i++){
a[i] += sum[i];
cout << a[i] << " ";
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}
```
查看全文
0
0
0
6



