[英]Optimizing Fenwick Tree (C++)
我有以下 Fenwick 樹算法的實現。
#include <bits/stdc++.h>
#define LSOne(S) (S & (-S))
using namespace std;
typedef long long int L;
int rsq(L b, L x[]){
int sum=0;
for(; b; b-=LSOne(b)) sum+=x[b];
return sum;
}
void adjust(int k, L v, L x[], int n){
for(; k<=n;k+=LSOne(k)) x[k]+=v;
}
int main(){
int n,q; cin>>n>>q;
L ft[n+1]; memset(ft,0,sizeof(ft));
while(q--){
char x; int i,j; cin>>x;
if(x=='+'){
cin>>i>>j;
adjust(i+1,j,ft,n);
} else if(x=='?') {
cin>>i;
cout<<rsq(i,ft)<<endl;
}
}
}
該程序應該能夠運行N<=5000000
並處理Q<=5000000
。 它應該能夠在 9 秒內運行。 但是在提交這個問題后,我得到了超出時間限制 (TLE) 的判決。 我已經嘗試了各種措施來優化此代碼,但無濟於事,它仍然給了我 TLE。 我怎么可能優化這段代碼,使它可以在 9 秒內運行。 非常感謝。
從標准輸入讀取 500000 行所需的時間可能是問題所在。 您是否嘗試優化 IO 緩沖:
int main() {
cin.tie(nullptr);
std::ios::sync_with_stdio(false);
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.