hdu2492 Ping pong

题意:一群乒乓爱好者居住在一条直线上,如果两个人想打比赛需要一个裁判,裁判的 位置 必须在两者之间 ,裁判的能力也必须不大于 参赛者最大的,不小于参赛者最小的

白皮的题解:考虑 第 i 个 为裁判 的情况 如果 左边 比 a[i] 小的 人数 为 c[i],则 有  i-c[i]-1 个人 比 a[i] 大,同样 右边 比 a[i] 小 的人数为 d[i] ,则比a[i]大的人为 n - i - d[i];

则方案 为 d[i]*( i - c[i] - 1 ) + c[i] * (n - i - d[i])

用 x[ a[i] ] 表示 比 a[i] 小的个数,这就涉及到了 树状数组

代码……

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <string>
using namespace std;
typedef long long ll;
const double ESP = 10e-;
const int MOD = ;
typedef long long LL;
const int MAXN = + ;
const int MAXA = + ;
int bit[MAXA];
int c[MAXN];
int d[MAXN];
int arr[MAXN]; int sum(int i){
int s = ;
while(i > ){
s += bit[i];
i -= i&-i;
}
return s;
} void add(int i,int x){
while(i < MAXA){
bit[i] += x;
i += i&-i;
}
}
int main(){
// freopen("input.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
memset(bit,,sizeof(bit));
memset(c,,sizeof(c));
memset(d,,sizeof(d));
for(int i = ;i <= n;i++){
scanf("%d",&arr[i]);
c[i] = sum(arr[i]);
add(arr[i],);
}
memset(bit,,sizeof(bit));
for(int i = n;i > ;i--){
d[i] = sum(arr[i]-);
add(arr[i],);
}
LL ans = ;
for(int i = ;i <= n;i++){
ans += c[i]*(n-i-d[i]) + d[i]*(i-c[i]-);
}
printf("%I64d\n",ans);
}
return ;
}

最新文章

  1. JQuery Datatables Columns API 参数详细说明
  2. NBUT 1673 迷宫问题(DP)
  3. 怎么查找执行比较慢的sql语句-DBA给的建议
  4. PE查看器
  5. 给postfix设置黑名单
  6. QQ高仿版
  7. linux命令行下svn常用命令
  8. 高通spi 屏幕 -lk代码分析
  9. javascript入门篇(六、正则表达式)
  10. [转帖]Windows Server 2016各种版本介绍
  11. 1. Nagios和 NagiosQL安装及配置
  12. codeforces433B
  13. 4.mycat部署
  14. [视频]K8飞刀 WordPress XSS添加管理员 &amp; GetShell 教程
  15. ASP.NET MVC使用RenderSection渲染节点
  16. Ubuntu环境如何上传项目到GitHub网站?
  17. bluez蓝牙测试工具
  18. 解题:POI 2015 PUS
  19. 有关VS中单元测试的一些问题
  20. TestNG Hello World入门示例

热门文章

  1. 设置textarea文本域不能调整大小 resize
  2. 在 Windows Azure 网站 (WAWS) 上对 Orchard CMS 使用 Azure 缓存
  3. IT第九天 - 包、访问修饰符、变量的内存分配、String类中常用方法
  4. Matrix Factorization, Algorithms, Applications, and Avaliable packages
  5. window下如何搭建linux环境
  6. ThinkPHP - 扩展个人类库 - 以验证码类为例子
  7. [Swust OJ 746]--点在线上(线段树解法及巧解)
  8. android 判断网络连接的工具类
  9. AFNetWorking 提交 NSArray 类型参数 取不到值的解决办法
  10. 我的Python成长之路---第三天---Python基础(12)---2016年1月16日(雾霾)