UVALive - 4329 Ping pong 树状数组
这题不是一眼题,值得做。
思路:
假设第个选手作为裁判,定义表示在裁判左边的中的能力值小于他的人数,表示裁判右边的中的能力值小于他的人数,那么可以组织场比赛。
那么现在考虑如何求得和数组。根据的定义知道我们要求的就是区间中能力值小于第i个人的能力值的数量,即能力值在区间的人数。我们定义表示能力值为i的人的数量。利用树状数组从左到右动态更新与维护很容易得到数组,同理得到数组。
注意:答案应该是longlong类型。
AC代码
//#define LOCAL
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long LL;
const int maxn = 20000+5;
int cnt[100000+5], Rank[maxn];
int left[maxn], right[maxn];
int maxRank;
int lowbit(int x) {
return x&-x;
}
void init() {
memset(cnt, 0, sizeof(cnt));
}
int getSum(int x) {
int res = 0;
while(x > 0) {
res += cnt[x];
x -= lowbit(x);
}
return res;
}
void update(int x, int d) {
while(x <= maxRank) {
cnt[x] += d;
x += lowbit(x);
}
}
void solve(int start, int end, int u, int *a) {
for(int i = start; i != end; i += u) {
a[i] = getSum(Rank[i]-1);
update(Rank[i], 1);
}
}
int main() {
#ifdef LOCAL
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif // LOCAL
int T, n;
scanf("%d", &T);
while(T--) {
init();
maxRank = -inf;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &Rank[i]);
maxRank = max(maxRank, Rank[i]);
}
solve(0, n, 1, left);
init();
solve(n-1, -1, -1, right);
LL ans = 0;
for(int i = 0; i < n; i++) { //枚举每一位裁判
ans += (LL)left[i] * (n-1-i-right[i]);
ans += (LL)right[i] * (i-left[i]);
}
printf("%lld\n", ans);
}
return 0;
}
如有不当之处欢迎指出!
UVALive - 4329 Ping pong 树状数组的更多相关文章
- LA 4329 Ping pong 树状数组
对于我这样一名脑残ACMer选手,这道题看了好久好久大概4天,终于知道怎样把它和“树状数组”联系到一块了. 树状数组是什么意思呢?用十个字归纳它:心里有数组,手中有前缀. 为什么要用树状数组?假设你要 ...
- LA 4329 - Ping pong 树状数组(Fenwick树)
先放看题传送门 哭瞎了,交上去一直 Runtime error .以为那里错了. 狂改!!!!! 然后还是一直... 继续狂改!!!!... 一直.... 最后发现数组开小了.......... 果断 ...
- Ping pong(树状数组经典)
Ping pong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- poj3928 Ping pong 树状数组
http://poj.org/problem?id=3928 Ping pong Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- UVA 1428 - Ping pong(树状数组)
UVA 1428 - Ping pong 题目链接 题意:给定一些人,从左到右,每一个人有一个技能值,如今要举办比赛,必须满足位置从左往右3个人.而且技能值从小到大或从大到小,问有几种举办形式 思路: ...
- LA4329 Ping pong 树状数组
题意:一条大街上住着n个乒乓球爱好者,经常组织比赛切磋技术.每个人都有一个能力值a[i].每场比赛需要三个人:两名选手,一名裁判.他们有个奇怪的约定,裁判必须住在两名选手之间,而裁判的能力值也必须在两 ...
- POJ 3928 Ping pong 树状数组模板题
開始用瓜神说的方法撸了一发线段树.早上没事闲的看了一下树状数组的方法,于是又写了一发树状数组 树状数组: #include <cstdio> #include <cstring> ...
- HDU 2492 Ping pong (树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2492 Ping pong Problem Description N(3<=N<=2000 ...
- 【暑假】[实用数据结构]UVAlive 4329 Ping pong
UVAlive 4329 Ping pong 题目: Ping pong Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: % ...
随机推荐
- 前端开发人员需要了解的CSS原理
转自http://web.jobbole.com/10011/ 一.浏览器的发展与CSS 网页浏览器主要通过HTTP协议连接网页服务器而取得网页,HTTP容许网页浏览器送交资料到网页服务器并且获取网页 ...
- maven核心概念--插件和目标
maven的核心概念有很多,我们这里先来看Plugins和Goals. 在上一篇博客中,我们用两种类型的命令行参数运行了Maven. 第一条命令,create.这是一条单个的插件目标,Archetyp ...
- junit4X系列--Runner解析
前面我整理了junit38系列的源码,那junit4X核心代码也基本类似.这里我先转载一些关于junit4X源码解析的好文章.感谢原作者的分享.原文地址:http://www.blogjava.net ...
- Activity的setContentView的流程
最简单的Activity中的内容大致是这样的: public class MainActivity extends Activity { @Override public void onCreate( ...
- java IO(二):字节流
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- 【转】awk数组操作
转自:http://blog.csdn.net/wangran51/article/details/9168361 用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算 ...
- 过16道练习学习Linq和Lambda(转)
1. 查询Student表中的所有记录的Sname.Ssex和Class列. select sname,ssex,class from studentLinq: from s in Students ...
- Nginx Https配置不带www跳转www
把 morethink.cn和www.morethink.cn合并到一个server上去,使用301永久重定向. 然后将 https://morethink.cn 转到 https://www.mor ...
- SpringMVC空字符串转为null
空字符串转为null 现在我遇到这样一个需求,那就是我想要吧前端传过来的值变为空,因为所谓前端的校验,其实都不是校验,如果前端传给后台一个表单,可是表单未填入值,我们后台进行判断的时候 既需要判断nu ...
- 我的java之路week2类的无参、带参方法
2.1语法 public 返回值类型 方法名(){ //方法体 } 2.2方法的调用语法 对象名.方法名 计算平均分和总成绩 public class Score { /** * 创建类 ScoreC ...