J题 树状数组WA

#include<bits/stdc++.h>
using namespace std;
const int N=10005;
int n,a[N],c[N],q,l,r,op;
int lowbit(int i){
    return (-i)&i;
}
void add(int i,int z){//数组的第i个值更新了 
    for(;i<=n;i+=lowbit(i)) c[i]+=z;
}
int sum(int i){//计算i之前的前缀和 
    int s=0;
    for(;i>0;i-=lowbit(i)) s+=c[i];
    return s;
}
int sum(int l,int r){  //计算区间和 
    return sum(r)-sum(l-1);
}
void one_change(int i, int k) {
    int diff = k - a[i];  // 计算变化的差值
    a[i] = k; //更新第 i 个数的值
    // 更新后续元素的前缀和
    for (int j = i; j <= n; j += lowbit(j)) {
        c[j] += diff;
    }
}
int f(int x){
	return 2*(abs(x*x*x-3*x)/(3*x*x+1));
}

int main()
{
    //初始化树状数组 
    memset(c,0,sizeof(c));
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		add(i,a[i]);
	}
	//功能自行调用
	while(q--){
		scanf("%d%d%d",&op,&l,&r);
		if(op==1){
			for(int i=l;i<=r;i++){
				one_change(i,f(a[i])); 
			}
		}else{
			cout<<sum(l,r)<<endl;
		}
	}
    return 0; 
}

求大佬帮忙看看,哪里有问题

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-16 14:00
机械打工仔:来挂自己了,经典巨婴从校园投入职场
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务