zoukankan      html  css  js  c++  java
  • JZYZOJ 1360 [usaco2011feb]人品问题 DP 树状数组 离散化

    http://172.20.6.3/Problem_Show.asp?id=1360

     
    好想好写
     
    代码
     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring>  
     4 #include<algorithm>  
     5 #include<cmath>
     6 #include<queue>
     7 using namespace std;
     8 const int maxn=100010;
     9 const long long modn=1000000009;
    10 long long n,siz;
    11 long long a[maxn]={},b[maxn]={};
    12 long long t[maxn]={};
    13 long long lowbit(long long x){return x&-x;}
    14 long long sum(long long x){
    15     long long tsn=0;
    16     while(x){
    17         tsn+=t[x];tsn%=modn;
    18         x-=lowbit(x);
    19     }return tsn;
    20 }
    21 void add(long long x,long long v){
    22     while(x<=siz){
    23         t[x]+=v;t[x]%=modn;
    24         x+=lowbit(x);
    25     }
    26 }
    27 int main(){
    28     scanf("%d",&n);
    29     for(int i=1;i<=n;i++){
    30         scanf("%I64d",&a[i]);
    31         a[i]+=a[i-1];b[i]=a[i];
    32     }b[n+1]=0;
    33     sort(b+1,b+2+n);
    34     siz=unique(b+1,b+2+n)-b-1;
    35     for(int i=1;i<=n;i++){
    36         a[i]=lower_bound(b+1,b+1+siz,a[i])-b;
    37     }long long zer=lower_bound(b+1,b+1+siz,0)-b;
    38     add(zer,1);
    39     long long x;
    40     for(int i=1;i<=n;i++){
    41         x=sum(a[i]);
    42         if(i==n){
    43             printf("%I64d
    ",x);
    44             break;
    45         }
    46         add(a[i],x);
    47     }
    48     return 0;
    49 }
    View Code
  • 相关阅读:
    2019春第八周作业
    2019春第七周作业
    第六周作业
    币值转换
    打印沙漏
    秋季学期学习总结
    人生影响最大的三位老师
    自我介绍
    2018秋季学习总结
    自己
  • 原文地址:https://www.cnblogs.com/137shoebills/p/7787053.html
Copyright © 2011-2022 走看看