#include <bits/stdc++.h>
#define lowbit(x) (x&(-x))
#define int long long
#define ll long long
using namespace std;
inline int read(){
int w = 0 , f = 1;
char ch = getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while('0'<=ch&&ch<='9'){
w=w*10+(ch-'0');
ch=getchar();
}
return w*f;
}
const int N = 1e5+15,MOD=1e9+9;
int n,a[N];
ll sum[N],dp[N],b[N];
struct BIT{
ll tr[N];
BIT(){
memset(tr,0,sizeof(tr));
}
void change(int x,ll k){
for(int i = x ; i<=n ; i+=lowbit(i)){
tr[i]+=k;
tr[i]%=MOD;
}
return ;
}
ll query(int x){
ll sum = 0;
for(int i = x ; i>0 ; i-=lowbit(i)){
sum+=tr[i];
sum%=MOD;
}
return sum;
}
}T;
signed main(){
n = read();
for(int i = 1 ; i<=n ; i++){
a[i]=read();
sum[i]=sum[i-1]+a[i];
b[i]=sum[i];
}
b[n+1]=0;
sort(b+1,b+n+2);
int m = unique(b+1,b+n+2) - b - 1;
for(int i = 1 ; i<=n+1 ; i++){
sum[i]=upper_bound(b+1,b+m+1,sum[i]) - b;
}
T.change(sum[n+1],1);
for(int i = 1 ; i<=n ; i++){
dp[i]=T.query(sum[i]);
T.change(sum[i],dp[i]);
}
cout<<dp[n];
return 0;
}
By the way : 调试代码有哪些好方法or好功能(比如Dev-C++的动态调试虽然我并不会用,求动态调试教程)