uva 1428 - Ping pong

原创 2013年12月06日 10:59:20
树状数组初级用法:
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <iostream>
#include <stack>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <set>
#include <vector>
#include <cstring>
#include <algorithm>

#define INF 0x3fffffff
#define inf -0x3f3f3f3f
#define N 50010
#define M 100010
#define LL long long
#define mod 95041567

using namespace std;

int n, MAX;
int arr[N], d[M], p[N], q[N];

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

int sum(int x){
    int s = 0;
    while(x > 0){
        s += d[x];
        x -= lowbit(x);
    }
    return s;
}

void add(int x){
    while(x <= MAX){
        ++ d[x];
        x += lowbit(x);
    }
}

int main() {
    //freopen("in.txt", "r", stdin);
    int n, t;
    scanf("%d", &t);
    while(t --){
        scanf("%d", &n);
        MAX = 0;
        for(int i = 0; i < n; ++ i){
            scanf("%d", &arr[i]);
            MAX = max(MAX, arr[i]);
            p[i] = q[i] = 0;
        }
        memset(d, 0, sizeof(d));
        for(int i = 0; i < n; ++ i){
            add(arr[i]);
            p[i] = sum(arr[i] - 1);
        }
        memset(d, 0, sizeof(d));
        for(int i = n - 1; i >= 0; -- i){
            add(arr[i]);
            q[i] = sum(arr[i] - 1);
        }
        LL cnt = 0;
        for(int i = 0; i < n; ++ i){
            cnt += (LL)p[i] * (n - i - 1 - q[i]) + (LL)(i - p[i]) * q[i];
        }
        //cout<< cnt <<endl;
        printf("%lld\n", cnt);
    }
    return 0;
}

UVa 1428 - Ping pong

二叉索引树入门例题。
  • crazysillynerd
  • crazysillynerd
  • 2015年02月25日 11:11
  • 364

UVa 1428 Ping pong (树状数组)

题目链接:http://acm.hust.edu.cn/vjudge/problem/36244 题目大意:给出n个不同的数,从左到右按顺序选出三个a1,a2,a3,使得a1>a2&&a2a...
  • Interstellar_
  • Interstellar_
  • 2016年08月20日 20:31
  • 161

Ping pong UVA - 1428 树状数组

这个题目,就是对于一个树状数组的考察,更新,求和,先说一下题目的意思,题目的要求就是需要统一,满足要求的情况下,有多少中可能,我们需要做的就是枚举裁判,然后对于一个裁判,a0 在a1到ai-1比他小的...
  • qq_36819130
  • qq_36819130
  • 2017年11月21日 18:06
  • 54

UVA 1428 - Ping pong(树状数组)

UVA 1428 - Ping pong 题目链接 题意:给定一些人,从左到右,每个人有一个技能值,现在要举办比赛,必须满足位置从左往右3个人,并且技能值从小到大或从大到小,问有几种举办形...
  • u011217342
  • u011217342
  • 2014年07月28日 17:30
  • 1444

uva 1428 - Ping pong (二叉索引树)

题意:一条大街上住着n个乒乓球爱好者,经常组织比赛切磋技术。每个人都有一个不同的技能值ai。每场比赛需要3个人:两名选手,一名裁判。他们有一个奇怪的规定,即裁判必须住在两名选手的中间,并且技能值也在两...
  • u010679062
  • u010679062
  • 2013年11月07日 17:06
  • 815

uva 1428 - Ping pong(树状数组)

题目链接:uva 1428 - Ping pong 题目大意:一条大街上住着n个乒乓球爱好者,经常组织比赛。每个人都有一个不同的能力值,每场比赛需要3个人,裁判要住在两个选手之间,并且能力值也要...
  • u011328934
  • u011328934
  • 2014年08月24日 23:28
  • 900

UVa:1428 Ping pong (树状数组)

如果之前做过树状数组求逆序数那再做这道题就很轻松了。 枚举以每个人为裁判,有两种情况,左边的人值比裁判小右边的人比裁判大,左边的人值比裁判大右边的人值比裁判大。左右两边相乘,两种情况相加就是答案。第一...
  • kkkwjx
  • kkkwjx
  • 2013年11月07日 19:41
  • 586

【uva】1428 - Ping pong(树状数组)

树状数组
  • u013451221
  • u013451221
  • 2014年07月30日 00:06
  • 409

uva 1428 Ping pong (树状数组)

题意: 一条街道上有N个选手,他们要打乒乓球赛,每个人有一个z
  • Baoli1008
  • Baoli1008
  • 2014年10月19日 11:31
  • 320

UVA 1428 Ping Pong(树状数组)

取low=min(a[i]|1#include #include #include #include using namespace std; #define rep(i,a,b) for(int i...
  • qq_33901573
  • qq_33901573
  • 2016年10月21日 08:08
  • 60
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uva 1428 - Ping pong
举报原因:
原因补充:

(最多只允许输入30个字)