[题目来源]:Beijing 2008

[关键字]:树状数组

[题目大意]:是要组成许多比赛,比赛的要求是,两个人比赛一个人作裁判,裁判的能力值必须要在两个人之间,位置也是,问一共有多少种不同的比赛方式。每个人的能力值各不相同。

//=====================================================================================================

[分析]:枚举一个中间点,查找它左边有几个比它能力值小的右边有几个比它能力值大的,根据乘法原理将其相乘;再查找它左边有几个比它能力值大的右边有几个比它能力值小的,根据乘法原理将其相乘。把每个点相加就是最终结果(int64)。剩下的问题就是如何求左右需要的值。先将其从小到大进行排序,然后按原来顺序枚举中间点,计算完后就将其插入它在排序后的位置上。所以统计时就是利用树状数组统计从1到枚举的中间点在排序后的位置之间有多少数,就是左边比它小的,用此时树状数组中的所有值(就是前i个数)的减去左边它小得和就是左边比它大的,再n到1来一遍就求出右边,再相乘。

[代码]:

View Code

  1 program Project1;  2 type  3   rec = record  4     x, p: longint;  5   end;  6 var  7   n, tt: longint;  8   a: array[0..20010] of rec;  9   fmin, fmax, bmin, bmax, b, tree: array[0..20010] of longint; 10  11 procedure qs(l, r: longint); 12 var 13   i, j, mid: longint; 14   t: rec; 15 begin 16   i := l; 17   j := r; 18   mid := a[(l+r) shr 1].x; 19   repeat 20     while a[i].x < mid do inc(i); 21     while a[j].x > mid do dec(j); 22     if i <= j then 23       begin 24         t := a[i]; 25         a[i] := a[j]; 26         a[j] := t; 27         inc(i); 28         dec(j); 29       end; 30   until i > j; 31   if l < j then qs(l,j); 32   if i < r then qs(i,r); 33 end; 34  35 procedure init; 36 var 37   i: longint; 38 begin 39   read(n); 40   for i := 1 to n do 41     begin 42       read(a[i].x); 43       a[i].p := i; 44     end; 45   qs(1,n); 46   for i := 1 to n do b[a[i].p] := i; 47 end; 48  49 function lowbit(k: longint):longint; 50 begin 51   lowbit := k and -k; 52 end; 53  54 function find(k: longint):longint; 55 var 56   sum: longint; 57 begin 58   sum := 0; 59   while k >= 1 do 60     begin 61       sum := sum+tree[k]; 62       k := k-lowbit(k); 63     end; 64   exit(sum); 65 end; 66  67 procedure ins(k: longint); 68 begin 69   while k <= n do 70     begin 71       tree[k] := tree[k]+1; 72       k := k+lowbit(k); 73     end; 74 end; 75  76 procedure work; 77 var 78   i, temp: longint; 79   ans: int64; 80 begin 81   fillchar(tree,sizeof(tree),0); 82   for i := 1 to n do 83     begin 84       temp := find(b[i]); 85       fmin[i] := temp; 86       fmax[i] := find(n)-temp; 87       ins(b[i]); 88     end; 89   fillchar(tree,sizeof(tree),0); 90   for i := n downto 1 do 91     begin 92       temp := find(b[i]); 93       bmin[i] := temp; 94       bmax[i] := find(n)-temp; 95       ins(b[i]); 96     end; 97   //for i := 1 to n do writeln(fmin[i],'',fmax[i]); 98   ans := 0; 99   for i := 1 to n do100     ans := ans+(fmin[i]*bmax[i])+(fmax[i]*bmin[i]);101   writeln(ans);102   //readln;103   //readln;104 end;105 106 begin107   read(tt);108   while tt <> 0 do109     begin110       init;111       work;112       dec(tt);113     end;114 end.

转载于:https://www.cnblogs.com/procedure2012/archive/2011/11/02/2233264.html

[POJ3928 Ping pong]相关推荐

  1. POJ 3928 amp; HDU 2492 Ping pong(树阵评价倒数)

    主题链接: PKU:http://poj.org/problem?id=3928 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2492 Descript ...

  2. Ping pong【树状数组】

    Ping pong UVALive - 4329 题目传送门 题目大意:一条大街上住着n个乒乓球爱好者,经常组织比赛切磋技术.每个人都有一个不同的技能值ai.每场比赛需要三个人:两名选手,一名裁判.他 ...

  3. ping/pong模式_PING的完整形式是什么?

    ping/pong模式 PING:数据包InterNet Groper (PING: Packet InterNet Groper) In the sector of networking of co ...

  4. Unity3D 4.x怎样实现动画的Ping Pong效果

    近期在看Unity官方的Stealth项目教学视频.视频使用的是Unity旧的版本号,而我如今正在使用的是Unity 4.5,动画系统的操作全然不同了.依照视频的方式根本无法设置动画的Ping Pin ...

  5. [UVALive - 4329] Ping pong 树状数组入门

    题目链接:Ping pong 题意 给你n个数,你从中取3个数,要求中间的数字大小在两边数字之间.问你总共有多少种取法. 题解 这个题首先需要分析转化. 假设第i个人作为中间数 a1-ai−1有ci个 ...

  6. HDOJ 2492 Ping pong 线段树+离散化

    //2492 Ping pong 线段树+离散化 /* 题意: 有一陀人从左到右排成一排,每个人有一个唯一的技能值,每个人都找其他人比赛, 比赛前要再找一个人做裁判,裁判的技能值不能比这两个人都高,也 ...

  7. go-gorilla的ping pong

    业务需求,ping每隔60秒执行一次,ping两次后,没有得到pong的消息,自动切断client. pongTime=180 * time.Second pingTime=60 * time.Sec ...

  8. ping pong buffer

    Ping pong buffer is a buffer used in a transmission that contains two separate buffers, while one bu ...

  9. Ping Pong Buffer 双缓冲 C++代码学习

    1.Ping Pong Buffer 原理分析 基本原理如上图所示,当设备有数据来时,先放入缓冲区1 然后将缓冲区1的数据放入缓冲区2,这时缓冲区1可接收下次数据.工作区可从缓冲区2拿数据 2.C++ ...

最新文章

  1. 算法-二叉树中的最大路径和
  2. C#.NET操作数据库通用类(MS SQL Server篇)
  3. 学习能力和工作态度是准绳
  4. winforms中限定上传文件类型
  5. 视觉意识的主动推理模型
  6. lighttpd在proxy-core下path_info为空的修复
  7. 盘点vivo手机的HiFi之路 极致的信仰
  8. Capture One使用的几个小技巧
  9. stm32定时器4重映射
  10. 服务器外链图片不显示,新浪图床已限制图片外链使用(附解决方法)
  11. 机器学习实战 | SKLearn入门与简单应用案例
  12. 安卓产品方案开发广告机案例
  13. java-php-python-ssm医用物品管理系统计算机毕业设计
  14. LabVIEW编程LabVIEW开发 十六进制转换ASCII例程与相关资料
  15. 开发的激光测距仪PCBA方案设计
  16. Python GPU加速
  17. jquery的淡入,淡出事件 fadeIn fadeOut
  18. 能长期做到以下32点的程序员,达到月薪30K往上,不太难:
  19. 《深入解析Windows操作系统》笔记第1章
  20. 雄关漫道 我为磐石 | 介入手术机器人定义医学领域新格局

热门文章

  1. 【备战春招/秋招系列】美团Java面经总结进阶篇 (附详解答案)
  2. 团队项目改进与详细设计
  3. git上传到github
  4. sqlserver聚合索引(clustered index) / 非聚合索引(nonclustered index)的理解
  5. 【转】Fresco之强大之余的痛楚
  6. Hibernate学习之createSQLQuery与createQuery的区别及使用
  7. Domino下实现仿Google搜索提示效果
  8. Web前端JavaScript笔记(4)节点
  9. python环境设置和OpenCV-python配置
  10. JAVA程序员一定知道的优秀第三方库(2016版)