zoukankan      html  css  js  c++  java
  • HDU 2492 树状数组

    DES:按照位置编号给你选手的rank值。每场比赛要有一个裁判,位置和rank在两个选手之间。两场比赛裁判不同 或有一个选手不同则可以说 两场比赛不同。问你一共可以有多少场比赛。

    思路是遍历每个人当裁判,找它左右两边比它大和小的数,交叉相乘。树状数组很好的应用。很巧妙。

    附代码:
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    #define maxn 100000

    int c[maxn + 10], a[20000]; // a[i]是输入的数值。c[i]是比a[i]小的数有多少个。

    int lowbit(int x)
    {
        return x & (-x);
    }

    int sum(int i)
    {
        int sum = 0;
        while(i > 0)
        {
            sum += c[i];
            i -= lowbit(i);
        }
        return sum;
    }

    void add(int pos, int val)
    {
        while(pos <= maxn)
        {
            c[pos] += val;
            pos += lowbit(pos);
        }
    }

    int l1[maxn], l2[maxn], r1[maxn], r2[maxn];

    int main()
    {
        int t, n;
        scanf("%d", &t);
        while(t--)
        {
            int i;
            memset(c,0,sizeof(c));
            scanf("%d",&n);
            for(i=1; i<=n; i++)
            {
                scanf("%d",&a[i]);
                int k1;
                k1=sum(a[i]);
                l1[i]=k1; //输入的i个数中 有k1个比a[i]小
                l2[i]=i-1-k1; //输入的i个数中 有k1个比a[i]大
                add(a[i],1);
            }
            memset(c,0,sizeof(c));
            int j=1;//代表现在输入的数的个数
            for(i=n; i>=1; i--,j++)
            {
                int k1;
                k1=sum(a[i]);
                r1[i]=k1;//输入a[i]后输入的那些数中有多少个比a[i]小的
                r2[i]=j-1-k1; //输入a[i]后输入的那些数中有多少个比a[i]大的
                add(a[i],1);
            }
            __int64 ans=0;
            for(i=1; i<=n; i++)
            {
                ans+=l1[i]*r2[i]+l2[i]*r1[i];
            }
            printf("%I64d ", ans);
        }
        return 0;
    }

  • 相关阅读:
    git如何进行远程分支切换
    js中实现多态
    css选择器中:first-child与:first-of-type的区别
    js实现图片延时加载的原理
    认识AMD、CMD、UMD、CommonJS
    CORS详解
    JS实现继承的五种方式
    jQuery.fn.extend() 函数详解
    Java基础面试题
    Java面试题集
  • 原文地址:https://www.cnblogs.com/icode-girl/p/4681283.html
Copyright © 2011-2022 走看看