我正在解决一个 CSES 问题。这是一个简单的 Fenwick 树问题,我编写了代码,它在较小的输入上完美运行,但在较大的输入上给出错误的答案。问题链接:https ://cses.fi/problemset/task/1648/ 我的问题解决方案:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int NMAX = 200005;
int n, q;
ll a[NMAX], tree[NMAX];
ll sum(int k){
ll s = 0;
while(k>0){
s+=tree[k];
k-=k&-k;
}
return s;
}
void add(int k, ll x){
while(k<=n){
tree[k]+=x;
k+=k&-k;
}
}
int main(){
cin>>n>>q;
for(int i = 1; i<=n; i++){
cin>>a[i];
add(i, a[i]);
}
while(q--){
int type; cin>>type;
if(type==1){
int k;
ll p;
cin>>k>>p;
add(k, p-a[k]);
a[k] = p;
}
else{
int l, r; cin>>l>>r;
cout<<sum(r)-sum(l-1)<<'\n';
}
}
return 0;
}
这很简单。我可能做错了什么?