Question:
There are Series a []; Operation op [] = {l, r, d}; ask q [] = {x, y };
The operation adds d to each number in the [l, r] interval of a. the query indicates executing op between [x, y.
Print the final sequence.
Ideas:
Two differential columns are used to process the number of calls made to each op and then perform operations on the sequence.
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 1e5+5;typedef long long ll;ll a[MAXN],sum[MAXN];ll d[MAXN],delta[MAXN];int l[MAXN],r[MAXN];int main(){ int n,m,k; scanf("%d %d %d",&n,&m,&k); for(int i=1;i<=n;i++) scanf("%I64d",a+i); for(int i=1;i<=m;i++) scanf("%d %d %I64d",l+i,r+i,delta+i); int x,y; while(k--) { scanf("%d %d",&x,&y); d[x]++;d[y+1]--; } for(int i=1;i<=m;i++) { sum[i] = sum[i-1] + d[i]; delta[i] *= sum[i]; } memset(d,0,sizeof(d)); memset(sum,0,sizeof(sum)); for(int i=1;i<=m;i++) { if(!delta[i]) continue; d[l[i]] += delta[i]; d[r[i]+1] -= delta[i]; } for(int i=1;i<=n;i++) { sum[i] = sum[i-1] + d[i]; a[i] += sum[i]; printf("%I64d%c",a[i],i==n?'\n':' '); }}