枚举中间的人,只要知道在这个人前面的技能值比他小的人数和后面技能值比他小的人数就能计算方案数了,技能值大的可有小的推出。

因此可以利用树状数组,从左到右往树上插点,每个点询问sum(a[i]-1)就是前面的技能值比它小的人数,然后再从右边往左重复一遍就可以算出答案。

#include<bits/stdc++.h>
using namespace std; const int maxa = 1e5+;
#define lowbit(x) (x&-x)
int C[maxa];
int sum(int x)
{
int ret = ;
while(x>){
ret += C[x]; x -= lowbit(x);
}
return ret;
} int r;
//x >0
void add(int x,int d)
{
while(x<=r){
C[x] += d; x += lowbit(x);
}
} const int maxn = 2e4+;
int a[maxn],p[maxn]; int main()
{
//freopen("in.txt","r",stdin);
int T; cin>>T;
while(T--){
int n; scanf("%d",&n);
r = ;
for(int i = ; i < n; i++) {
scanf("%d",a+i); r = max(r,a[i]);
}
fill(C+,C++r,);
for(int i = ; i < n; i++){
p[i] = sum(a[i]-);
add(a[i],);
}
fill(C+,C++r,);
long long ans = ;
for(int i = n-; i >= ; i--){
int q = sum(a[i]-);
ans += (n-i--q)*p[i] + q*(i-p[i]);
add(a[i],);
}
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. POJ No.3617【B008】
  2. FTP多任务下载实现类
  3. 获取iTextSharp 的image 报错
  4. Linux内核设计第三周——构造一个简单的Linux系统
  5. linux进程间通信-XSI IPC
  6. NOIp 2006 作业调度方案 Label:坑 模拟(tyvj你不给我ac,我就把名字献给附中oj)
  7. Unity Shader播放序列帧动画
  8. Android小项目之四 自动更新检查的逻辑
  9. hihocoder #1289 : 403 Forbidden (2016 微软编程笔试第二题)
  10. 数据库中的schema概念
  11. iOS-BLE蓝牙开发持续更新
  12. soapUI通过groovy脚本设置超时时间
  13. JQuery学习(3)
  14. 【Bootstrap】兼容IE8、谷歌和其他主流浏览器的观众IMAX风格的页面
  15. BZOJ 1208 HNOI2004 宠物收容所 平衡树/set
  16. UVa10791 - Minimum Sum LCM
  17. Beta第七天
  18. 一步一步理解 python web 框架,才不会从入门到放弃
  19. Asp.Net Core实战(干货)
  20. 学习:MQTT协议及原理

热门文章

  1. 2019年第十届蓝桥杯国赛总结(JavaA组)
  2. POJ - 2349 ZOJ - 1914 Arctic Network 贪心+Kru
  3. Linux 基础命令(一)
  4. JAVA企业级开发-JavaScript(02)
  5. Java之Spring Cloud概念介绍(非原创)
  6. OVN学习(三)
  7. sql server添加sa用户和密码
  8. Nacos深入浅出(二)
  9. Django之ORM优化查询的方式
  10. AtCoder Beginner Contest 071 ABCD