首页 > 其他 > 详细

UVALIVE 4329 Ping pong

时间:2015-03-20 20:13:43      阅读:186      评论:0      收藏:0      [点我收藏+]

大白上的题目

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
#define MAXN 100010
#define MAXD 20010
int num[MAXN];
int val[MAXD],lmin[MAXD],rmin[MAXD];
int lowbit(int x) {return x & (-x);}
int sum(int x)
{
        int ret = 0;
        while (x > 0)
        {
                ret += num[x];
                x -= lowbit(x);
        }
        return ret;
}
void add(int x,int d)
{
        while (x <= MAXN)
        {
                num[x] += d;
                x += lowbit(x);
        }
}
int main()
{
        int T,n;
        scanf("%d",&T);
        while (T--)
        {
                scanf("%d",&n);
                memset(num,0,sizeof(num));
                for (int i = 1; i <= n ; i++)
                {
                        scanf("%d",&val[i]);
                        add(val[i],1);
                        lmin[i] = sum(val[i] - 1);
                }
                memset(num,0,sizeof(num));
                for (int i = n ; i >= 1 ; i--)
                {
                        add(val[i],1);
                        rmin[i] = sum(val[i] - 1);
                }
                LL ans = 0;
                for (int i = 1; i <= n ; i++)
                        ans += lmin[i] * (n - i - rmin[i]) + (i - lmin[i] - 1) * rmin[i];
                printf("%lld\n",ans);
        }
        return 0;
}

  

UVALIVE 4329 Ping pong

原文:http://www.cnblogs.com/Commence/p/4354438.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!