2 条题解

  • 0
    @ 2025-10-8 16:53:56
    #include<bits/stdc++.h>
    using namespace std;
    const int N=35000;
    int n,a[51000],c[N+1],L[51000],R[51000];
    //L[i]表示对于a[i]左边有多少个比它小
    //R[i]表示对于a[i]右边有多少个比它小
    int lowbit(int x){return x&(-x);}
    void add(int x,int k)
    {
        while(x<=N)c[x]+=k,x+=lowbit(x);
    }
    int getsum(int x)
    {
        int s=0;
        while(x>0)s+=c[x],x-=lowbit(x);
        return s;
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]),a[i]++;
    
        //让前面的数先出现,每次统计已经出现的有多少个比自己小的数的个数,等价于求L[i]
        memset(c,0,sizeof(c));
        for(int i=1;i<=n;i++)add(a[i],1),L[i]=getsum(a[i]-1);
    
        //让后面的数先出现,每次统计已经出现的有多少个比自己小的数的个数,等价于求R[i]
        memset(c,0,sizeof(c));
        for(int i=n;i>=1;i--)add(a[i],1),R[i]=getsum(a[i]-1);
    
        long long ans=0;for(int i=1;i<=n;i++)ans+=L[i]*R[i];
        printf("%lld\n",ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:53:47
      #include<bits/stdc++.h>
      using namespace std;
      const int N=35000;
      int n,a[51000],c[N+1],L[51000],R[51000];
      //L[i]表示对于a[i]左边有多少个比它小
      //R[i]表示对于a[i]右边有多少个比它小
      int lowbit(int x){return x&(-x);}
      void add(int x,int k)
      {
          while(x<=N)c[x]+=k,x+=lowbit(x);
      }
      int getsum(int x)
      {
          int s=0;
          while(x>0)s+=c[x],x-=lowbit(x);
          return s;
      }
      int main()
      {
          scanf("%d",&n);
          for(int i=1;i<=n;i++)scanf("%d",&a[i]),a[i]++;
      
          //让前面的数先出现,每次统计已经出现的有多少个比自己小的数的个数,等价于求L[i]
          memset(c,0,sizeof(c));
          for(int i=1;i<=n;i++)add(a[i],1),L[i]=getsum(a[i]-1);
      
          //让后面的数先出现,每次统计已经出现的有多少个比自己小的数的个数,等价于求R[i]
          memset(c,0,sizeof(c));
          for(int i=n;i>=1;i--)add(a[i],1),R[i]=getsum(a[i]-1);
      
          long long ans=0;for(int i=1;i<=n;i++)ans+=L[i]*R[i];
          printf("%lld\n",ans);
          return 0;
      }
      
      • 1

      信息

      ID
      775
      时间
      500ms
      内存
      128MiB
      难度
      6
      标签
      递交数
      157
      已通过
      45
      上传者