分块维护和板子

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
using ll = long long;
ll s[N];
ll b[N];
ll w[N];
ll add[N];
int l[N],r[N];
int tot,n,len,q;
int belong[N];


inline void init()
{
	len = sqrt(n),tot = (n+len-1)/len;
	for(int i=1;i<=tot;i++)
	 l[i] = r[i-1]+1,r[i] = i*len;
	 
	for(int i=1;i<=tot;i++){
		for(int j=l[i];j<=r[i];j++)
		 b[i]+=w[j],belong[j] = i;
		s[i] = s[i-1] + b[i];
	}
	
}

inline void modify(int ql,int qr,int c){
	int p = belong[ql],q = belong[qr];
	if(p==q){
		for(int i=ql;i<=qr;i++)w[i]+=c,b[p]+=c;
		for(int i=p;i<=tot;i++)s[i] = s[i-1]+b[i];
		return;
	}
	
	for(int i=ql;i<=r[p];i++)w[i]+=c,b[p]+=c;
	for(int i=qr;i>=l[q];--i)w[i]+=c,b[q]+=c;
	for(int i=p+1;i<=q-1;i++)add[i]+=c,b[i]+=(ll)(r[i]-l[i]+1)*c;
	
	for(int i=p;i<=tot;i++)s[i] = s[i-1]+b[i];
}



inline ll query(int ql,int qr){
	int p = belong[ql],q = belong[qr];
	ll res = 0;
	if(p==q){
		for(int i=ql;i<=qr;i++)res+=w[i]+add[p];
		return res;
	}
	
	res = s[q-1]-s[p];
	for(int i=ql;i<=r[p];++i)res+=w[i]+add[p];
	for(int i=qr;i>=l[q];--i)res+=w[i]+add[q];
	return res;
}



int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>q;
	for(int i=1;i<=n;i++)cin>>w[i];
	init();
	while(q--){
		int op,ql,qr;cin>>op>>ql>>qr;
		if(op==1){
			int c;
			cin>>c;modify(ql,qr,c);
		}
		else cout<<query(ql,qr)<<"\n";
	}
}
相关推荐
乐迪信息38 分钟前
乐迪信息:基于AI算法的煤矿作业人员安全规范智能监测与预警系统
大数据·人工智能·算法·安全·视觉检测·推荐算法
hsjkdhs1 小时前
C++之多层继承、多源继承、菱形继承
开发语言·c++·算法
立志成为大牛的小牛2 小时前
数据结构——十七、线索二叉树找前驱与后继(王道408)
数据结构·笔记·学习·程序人生·考研·算法
星空下的曙光2 小时前
Node.js crypto模块所有 API 详解 + 常用 API + 使用场景
算法·node.js·哈希算法
Algo-hx2 小时前
数据结构入门 (七):从“链接”到“分支” —— 初探树与二叉树
数据结构
小贾要学习3 小时前
【数据结构】C++实现红黑树
数据结构·c++
StarPrayers.3 小时前
旅行商问题(TSP)(2)(heuristics.py)(TSP 的两种贪心启发式算法实现)
前端·人工智能·python·算法·pycharm·启发式算法
爱吃橘的橘猫3 小时前
嵌入式系统与嵌入式 C 语言(2)
c语言·算法·嵌入式
235163 小时前
【LeetCode】146. LRU 缓存
java·后端·算法·leetcode·链表·缓存·职场和发展
weixin_307779135 小时前
使用Python高效读取ZIP压缩文件中的UTF-8 JSON数据到Pandas和PySpark DataFrame
开发语言·python·算法·自动化·json