编辑代码

//此代码为多次查找差分和前缀和后的结果,有自己打的注释
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
#define LINf 0x3f3f3f3f3f3f3f3f
#define mod 100000007
#define maxn 200005
using namespace std;
int a[maxn],b[maxn],l,r;
int main(){
	int n,m;
	cin>>n>>m;
	
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	
	
	for(int i=1;i<=n;i++){
		a[i]= b[i]+b[i-1];
	}
	for(int i=1;i<=n;i++){
		b[i] = a[i]+a[i-1];
	}
	//前两次for循环为两次差分
	for(int i=1;i<=n;i++){
		cin>>l>>r;
		a[l]++;
		a[r+1] -= (r-l-2);
		a[r+2] += (r-l+1);
	}//输入与预处理
	
	
	for(int i=1;i<=n;i++){
		a[i] = a[i-1]+a[i];
	}//执行第一次差分
	for(int i=1;i<=n;i++){
		a[i] = a[i-1]+a[i];
		cout<<a[i]<<" ";
	}//执行第二次差分与输出
	
	
	return 0;//程序完美结束
}