zoukankan      html  css  js  c++  java
  • poj 3928 Ping pong 树状数组

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    int n,c[20000+5],d[20000+5],a[20000+5],p[100000+5];
    
    int sum(int x)
    {
        int ret=0;
        while(x>0)
        {
            ret+=p[x];
            x-=x&(-x);
        }
        return ret;
    }
    
    void add(int x)
    {
        while(x<100000+5)
        {
            p[x]+=1;
            x+=x&(-x);
        }
    }
    
    int main()
    {
        int _,i,j;
        scanf("%d",&_);
        while(_--)
        {
            scanf("%d",&n);
            for(i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
            }
            memset(p,0,sizeof(p));
            for(i=1;i<=n;i++)
            {
                add(a[i]);
                c[i]=sum(a[i]-1);
            }
    
            memset(p,0,sizeof(p));
            for(i=n;i>=1;i--)
            {
                add(a[i]);
                d[i]=sum(a[i]-1);
            }
            long long int ans=0;
            for(i=1;i<=n;i++)
            {
                ans+=c[i]*(n-i-d[i])+d[i]*(i-c[i]-1);
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    P1909 买铅笔
    树形结构
    图片
    cookie
    JSON
    操作数组
    竖线分割|
    订单提交中... 后前面三点动画
    w'w
    解决扫码枪输入input时受中文输入法的影响
  • 原文地址:https://www.cnblogs.com/xryz/p/4847889.html
Copyright © 2011-2022 走看看