求救样例过不了

P3368 【模板】树状数组 2

有人回答一下吗
by yyjw14 @ 2023-08-26 09:10:25


问题出在初始化,树状数组和读入的数组 $a$ 应该完全不一样吧。帮你改了一下,另外定义了一个 $tr$ 数组,然后把 $a_i-a_{i-1}$ 存到 $tr$ 就可以了 ``` #include<bits/stdc++.h> using namespace std; #define ll long long int i,j,k,m,mm,n,x,y,z,mmm,ii; int a[500005],tr[500005]; int lowbit(int v) { return v&(-v); } void update(int l,int u) { for(m=l;m<=i;) { tr[m]+=u; m+=lowbit(m); } return; } int search(int yy) { mm=0; for(n=yy;n>0;n-=lowbit(n)) { mm+=tr[n]; } return mm; } int main() { cin>>i>>j; for(k=1;k<=i;k++) { scanf("%d",&a[k]); update(k,a[k]-a[k-1]); } for(k=1;k<=j;k++) { cin>>x; if(x==1) { cin>>y>>z>>ii; update(y,ii); update(z+1,-ii); } else { cin>>y; z=search(y); cout<<z<<endl; } } return 0; } ```
by wujingfey @ 2023-10-03 08:32:18


@[csp_sgxx](/user/916380) ~~另外这是树状数组 2,~~ 要求区间修改单点查询。所以应该把差分后的数组存到树状数组,这样求的前缀和才是单点值、修改才是区间修
by wujingfey @ 2023-10-03 08:42:53


@[wujingfey](/user/637073) 这是我一个月前写的现已debug,谢谢
by yyjw14 @ 2023-10-03 16:11:49


|