题目描述
输入
输出
• 单个整数:表示分组方案数模 1000000009 的余数
样例输入
样例输出
提示
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int d[1000005],f[100005],n,sum[100005],p[100005],maxx; int lowbit(int x) { return x&(-x); } void add(int x,int c) { while (x<=1000000) { d[x]+=c; d[x]%=1000000009; x+=lowbit(x); } } int query(int x) { int s=0; while (x>0) { s+=d[x]; s%=1000000009; x-=lowbit(x); } return s%1000000009; } int binary(int x) { int l=1,r=n+1; while (l<r) { int mid=(l+r)/2; //if (p[mid]==x) return l; if (p[mid]>=x) r=mid; else l=mid+1; } return l; } int main() {int i; //freopen("file.in","r",stdin); scanf("%d",&n); for (i=1;i<=n;i++) { scanf("%d",&sum[i]); sum[i]+=sum[i-1]; p[i]=sum[i]; } p[n+1]=0; sort(p+1,p+n+2); // for (i=1;i<=n;i++) // sum[i]=binary(sum[i]); add(binary(0),1); for (i=1;i<=n;i++) { f[i]=query(binary(sum[i])); f[i]%=1000000009; add(binary(sum[i]),f[i]); } cout<<f[n]%1000000009; }