zoukankan      html  css  js  c++  java
  • 奶牛抗议

    有点像 佳佳的手账 a[l]+a[l+1]+......+a[r]>=0

                                  s[r]-s[l-1]>=0

                                  s[l-1]<s[r]

                                  求顺序对

                                  用树状数组维护

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm> 
     4 using namespace std;
     5 const int maxn=1e5+7;
     6 const int mod=1000000009;
     7 int n;
     8 int ans;
     9 int a[maxn],tmp[maxn],c[maxn];
    10 int s[maxn];
    11 int lowbit(int x){return x&(-x);}
    12 void add(int x,int y){
    13     for(;x<=n;x+=lowbit(x)) {c[x]+=y;c[x]%=mod;}
    14 }
    15 int sum(int x){
    16     int ret=0;
    17     for(;x;x-=lowbit(x)) {ret+=c[x];ret%=mod;}
    18     return ret%mod;
    19 }
    20 int main(){
    21     cin>>n;
    22     for(int i=1;i<=n;i++) {cin>>a[i];s[i]=s[i-1]+a[i];tmp[i]=s[i];}
    23     sort(tmp+1,tmp+n+1);
    24     for(int i=0;i<=n;i++){
    25         s[i]=lower_bound(tmp+1,tmp+n+1,s[i])-tmp;
    26     }
    27     add(s[0],1);
    28     for(int i=1;i<=n;i++){
    29         ans=sum(s[i])%mod;
    30         add(s[i],ans);
    31     }
    32     cout<<ans%mod<<endl;
    33     return 0;
    34 } 

     因为计算的是s[r]和s[l-1]所以要从s[0]开始计算,而s[0]是0要用离散化来处理

    1.用f来计算每个s[i]的值,而最后答案是最后加入的s[i]对应的f值,我却记录f数组最后的值......

    2.忘记了s[l-1]把s[1]设成1,应该是s[0]设成1

  • 相关阅读:
    关于c语言的左移运算
    如何修改mac的root密码
    LaTeX语法笔记
    texlive测试是否安装成功
    latex学习(四)tlmgr
    latex学习(三)
    latex学习(二)
    Latex学习(一)
    引导修复软件boot-repair
    MySQL远程连接和备份还原
  • 原文地址:https://www.cnblogs.com/lcan/p/9557974.html
Copyright © 2011-2022 走看看