uva 1428 - Ping pong(树状数组)
来源:互联网 发布:linux误删除文件夹恢复 编辑:程序博客网 时间:2024/05/20 19:31
题目链接:uva 1428 - Ping pong
题目大意:一条大街上住着n个乒乓球爱好者,经常组织比赛。每个人都有一个不同的能力值,每场比赛需要3个人,裁判要住在两个选手之间,并且能力值也要在选手之间,问说最多能举行多少场比赛。
解题思路:预处理出bi和ci分别表示说在1~i中能力值比第i个人小的人和i+1~n中能力值比第i个人小的。处理过程用树状数组维护即可。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define lowbit(x) ((x)&(-x))const int maxn = 1e5;typedef long long ll;int n, s[maxn+5];int N, a[maxn+5];ll b[maxn+5];void add (int x, int v) { while (x <= n) { s[x] += v; x += lowbit(x); }}int sum (int x) { int ret = 0; while (x > 0) { ret += s[x]; x -= lowbit(x); } return ret;}int main () { int cas; scanf("%d", &cas); while (cas--) { scanf("%d", &N); n = 0; memset(s, 0, sizeof(s)); for (int i = 1; i <= N; i++) { scanf("%d", &a[i]); n = max(a[i], n); } for (int i = 1; i <= N; i++) { b[i] = sum(a[i]-1); //printf("%lld ", b[i]); add(a[i], 1); } //printf("\n"); ll ans = 0; memset(s, 0, sizeof(s)); for (int i = N; i > 0; i--) { ll d = sum(a[i]-1); add(a[i], 1); ans += (b[i] * (N - i - d)) + d * (i - 1 - b[i]); } printf("%lld\n", ans); } return 0;}
2 0
- uva 1428 - Ping pong(树状数组)
- UVa:1428 Ping pong (树状数组)
- UVA 1428 - Ping pong(树状数组)
- 【uva】1428 - Ping pong(树状数组)
- uva 1428 - Ping pong(树状数组)
- uva 1428 Ping pong (树状数组)
- UVa 1428 Ping pong (树状数组)
- UVA 1428 Ping Pong(树状数组)
- uva 1428 - Ping pong(树状数组,4级)
- uva 1428 - Ping pong (树状数组的应用)
- 树状数组(二叉索引树)(uva 1428 - Ping pong )
- Uva 1428 Ping pong (树状数组,Fenwick树)
- Ping pong(树状数组)
- hdu2492 Ping pong (树状数组)
- UVA1428 Ping pong(树状数组)
- POJ3928 Ping pong 树状数组
- UVA1428 - Ping pong(树状数组)
- 树状数组 POJ2492 Ping Pong
- 分布式web服务架构
- UVA - 11768 Lattice Point or Not (拓展gcd)
- Android实现刮刮乐效果
- sql loader(sqlldr)的用法
- Android ViewFinder
- uva 1428 - Ping pong(树状数组)
- JAX-WS 注释
- 浅析线程的基本使用(2)
- 关于野人与传教士问题的心得
- HDU 4981 Goffi and Median(水)
- androi 源码框架
- set_error_handler函数
- JQuery的遍历
- 无权最短路劲 地址:http://blog.csdn.net/midgard/article/details/4152336