#include <bits/stdc++.h> using namespace std; signed main(){ O(1) 常数级别 O(log n) 对数级别 O(n)、O(n^2) 多项式级别 O(2^n) 指数级别 O(n!) 阶乘级别 n!=123*...*(n-1)*n

n,m<=10^5
给定一个长度为n的数组a
问题1 查询m次 求区间[l,r]的值 
问题2 修改m次 一段区间[l,r]统一加k 
b[i]代表1到i所有的a求和 
l,r b[r]-b[l-1]

ci 代表a[i]-a[i-1] 
c[l]+=k c[r+1]-=k;
a 1 2 3 4
c 1 1 1 1
  1 3 1 -1
  1 4 5 4
return 0;

}

//问题2 修改m次 一段区间[l,r]统一加k #include <bits/stdc++.h> using namespace std; int const N=1e5+10; int n,m,k,l,r,a[N],c[N]; int main(){ cin>>n>>m; for (int i=1;i<=n;i++) cin>>a[i]; for (int i=1;i<=n;i++) c[i]=a[i]-a[i-1]; while (m--){ cin>>l>>r>>k; c[l]+=k; c[r+1]-=k; } for (int i=1;i<=n;i++) a[i]=a[i-1]+c[i]; for (int i=1;i<=n;i++) cout<<a[i]<<" "; return 0; }

0 comments

No comments so far...