栈空间容易爆怎么办
  • 板块灌水区
  • 楼主WZWZWZWY
  • 当前回复15
  • 已保存回复15
  • 发布时间2023/8/20 10:13
  • 上次更新2023/11/3 02:31:22
查看原帖
栈空间容易爆怎么办
704668
WZWZWZWY楼主2023/8/20 10:13

rt,函数递归的时候定义变量…… QAQ


顺便有人能帮我看看这个爆了怎么办吗

样例输入:

5 5
1 5 4 2 3
1 1 3
2 2 5
1 3 -1
1 4 2
2 1 4
#include <iostream>

using namespace std;

int n,m,f[2000001],a[500001];

inline void buildtree(int k, int l , int r){
	if (l == r){
		f[k] = a[l];
		return;
	}
	int m = (l+r) >> 1;
	buildtree(k+k, l, m);
	buildtree(k+k+1, m+1, r);
	f[k] = f[k+k] + f[k+k+1];
} 

inline void add(int k, int l, int r, int x, int y){
	f[k] += y;
	if (l == r) return;
	int m = (l+r) >> 1;
	if (x <= m)
		add(k+k,l,m,x,y);
	else 
		add(k+k+1,m+1,r,x,y);
}

int calc(int k, int l, int r, int s, int t){
	if (l == s && r == t) return f[k];
	int m = (l+r) >> 1;
	if (t <= m) return calc(k+k,l,m,s,t);
	else 
		if (s > m) return calc(k+k+1,m,r,s,t);
		else return calc(k+k,l,m,s,t) + calc(k+k+1,m+1,r,s,t);
}

int main(){
	scanf("%d%d",&n,&m);
	for (int i = 1;  i <= n; i++) 
		scanf("%d",&a[i]);
	buildtree(1,1,n);//编号、左右端点 
	int d,x,y;
	for (int i = 1; i <= m; i++){
		scanf("%d%d%d",&d,&x,&y);
		if (d == 1) add(1,1,n,x,y);
		else cout << calc(1,1,n,x,y) << " ";
	}
}
2023/8/20 10:13
加载中...