思路:树状数组。

考虑第i个人当裁判,那么只要计算出在他之前比他小的乘在他之后比他大的与在他之前比他大的乘在他之后比他小的,那么用两个树状数组维护一下就行了。复杂的(n*log(n))

 1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<stack>
7 #include<math.h>
8 using namespace std;
9 typedef long long LL;
10 int bitl[200005];
11 int bitr[200005];
12 int lowbit(int x);
13 void addl(int x);
14 void addr(int x);
15 int askl(int x);
16 int askr(int x);
17 int ans[100005];
18 int bns[100005];
19 int aksl[200005];
20 int aksr[200005];
21 int main(void)
22 {
23 int T;
24 scanf("%d",&T);
25 while(T--)
26 {
27 int n;
28 scanf("%d",&n);
29 memset(bitl,0,sizeof(bitl));
30 memset(bitr,0,sizeof(bitr));
31 int i,j;
32 for(i = 1; i <= n; i++)
33 {
34 scanf("%d",&ans[i]);
35 }
36 int cn = 1;
37 for(i = n; i >= 1; i--)
38 {
39 bns[cn++] = ans[i];
40 }
41 for(i = 1; i <= n; i++)
42 {
43 aksl[i] = askl(ans[i]-1);
44 addl(ans[i]);
45 aksr[i] = askr(bns[i]-1);
46 addr(bns[i]);
47 }
48 LL sum = 0;
49 for(i = 2;i <= n-1;i++)
50 {
51 sum = sum + (LL)aksl[i]*(LL)(n-i-aksr[n-i+1])+(LL)(i - 1 - aksl[i])*(LL)aksr[n-i+1];
52 }
53 printf("%lld\n",sum);
54 }
55 return 0;
56 }
57 int lowbit(int x)
58 {
59 return x&(-x);
60 }
61 void addl(int x)
62 {
63 while(x <= 100000)
64 {
65 bitl[x]++;
66 x += lowbit(x);
67 }
68 }
69 void addr(int x)
70 {
71 while(x <= 100000)
72 {
73 bitr[x]++;
74 x += lowbit(x);
75 }
76 }
77 int askl(int x)
78 {
79 int sum = 0;
80 while(x > 0)
81 {
82 sum += bitl[x];
83 x -= lowbit(x);
84 }
85 return sum;
86 }
87 int askr(int x)
88 {
89 int sum = 0;
90 while(x > 0)
91 {
92 sum += bitr[x];
93 x -= lowbit(x);
94 }
95 return sum;
96 }

最新文章

  1. C# Winform TreeView 的一些基本用法
  2. 如何在IDEA上创建Spring MVC项目
  3. 1.1. 如何使用XproerUI库
  4. 值得 Web 开发人员学习的20个 jQuery 实例教程
  5. windbg学习!vad
  6. 开启自启动oracle和实例
  7. sed 使用 删除匹配行
  8. POJ 1904 King&#39;s Quest 强连通分量+二分图增广判定
  9. iOS面试题05-父子控制器、内存管理
  10. go 接口案例,音乐播放器
  11. RobotFrameWork安装笔记
  12. Linux显示所有可更新的软件清单命令
  13. 每天学点mysql
  14. NuGet 手动清除缓存不起作用
  15. 从CAP理论中分析Eureka与zookeeper的区别
  16. python学习之老男孩python全栈第九期_day001作业
  17. 初次见识结构体与map的区别
  18. c++刷题(43/100)矩阵旋转打印
  19. centos7 安装oracle jdk 与openjdk 实现切换
  20. Java集合之LinkedList源码解析

热门文章

  1. Vue相关,vue.nextTick
  2. 编程之美Q1
  3. Output of C++ Program | Set 14
  4. ES6——&gt;let,箭头函数,this指向小记
  5. 了解LINQ
  6. MicroK8S 安装 修改IP 设置镜像加速 升级 卸载等
  7. java 注解的几大作用及使用方法详解
  8. TCP链接请求的10种状态
  9. Nginx配置FTP
  10. Nginx平滑升级版本