题目中只n个人,每个人有一个ID和一个技能值,一场比赛需要两个选手和一个裁判,只有当裁判的ID和技能值都在两个选手之间的时候才能进行一场比赛,现在问一共能组织多少场比赛。

由于排完序之后,先插入的一定是小的,所以左右两边的大于小于都能确定,用树状数组维护选手的id

Sample Input
1
3 1 2 3
Sample Output
1

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 using namespace std;
 8 int n,m,t;
 9 const int maxn=100000;
10 __int64 c[maxn];
11 struct node
12 {
13     int x,id;
14 }p[maxn+2];
15 bool cmp(node a,node b)
16 {
17     return a.x<=b.x;
18 }
19 int lowbit(int i)
20 {
21     return i&(-i);
22 }
23 void add(int i,__int64 d)
24 {
25     while(i<=maxn)
26     {
27         c[i]+=d;
28         i+=lowbit(i);
29     }
30 }
31 __int64 sum(int i)
32 {
33     __int64 ret=0;
34     while(i)
35     {
36         ret+=c[i];
37         i-=lowbit(i);
38     }
39     return ret;
40 }
41 int main()
42 {
43     int i,j,k;
44     __int64 lmin,lmax,rmin,rmax,ans=0;
45     //freopen("1.in","r",stdin);
46     scanf("%d",&t);
47     while(t--)
48     {
49         for(i=0;i<=maxn;i++) c[i]=0;
50         scanf("%d",&n);
51         for(i=1;i<=n;i++)   scanf("%d",&p[i].x),p[i].id=i;
52         sort(p+1,p+1+n,cmp);
53         add(p[1].id,1);
54         for(i=2;i<n;i++)
55         {
56             lmin=sum(p[i].id-1);        //计数是从1到i-1,故要多减一个1
57             lmax=p[i].id-1-lmin;
58             //printf("%I64d %I64d ",lmin,lmax);
59             rmin=sum(n)-sum(p[i].id);
60             rmax=n-p[i].id-rmin;
61             //printf("%I64d %I64d \n",rmin,rmax);
62             ans+=(lmin*rmax+rmin*lmax);  add(p[i].id,1);
63             //printf("%I64d\n",ans);
64         }
65         printf("%I64d\n",ans);
66         ans=0;
67     }
68     return 0;
69 }

转载于:https://www.cnblogs.com/cnblogs321114287/p/4281855.html

poj 3928 树状数组相关推荐

  1. HDU 2689 POJ 2299 树状数组 + 离散化

    以前都是直接树状数组裸奔,昨天一个题数据量好大,过不了,没办法只能学离散化,今天A了第一个离散化的题 #include<stdio.h> #include<string.h> ...

  2. poj 3067 树状数组

    这题的关键是方法.怎么才是相交的呢?一种方法是线段a的左边比线段b的左边小,同时a的右边比b的右边大.这时就可以构成一个相交.于是,我们可以根据左边的值来做降序排列,然后根据线段树来统计crosses ...

  3. POJ 3928 hdu 2492 Uva1428 PingPong 【树状数组】

    Ping pong                                                   Time Limit: 2000/1000 MS (Java/Others)   ...

  4. poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★

    poj 2352 Stars 目录 poj 2352 Stars 1.树状数组 2.线段树,先建树后查找 3.线段树,边建树边查找 Description Astronomers often exam ...

  5. POJ 2481 Cows POJ 2352 Stars(树状数组妙用)

    题目链接:POJ 2481 Cows POJ 2352 Stars 发现这两个题目都跟求逆序数有着异曲同工之妙,通过向树状数组中插入点的位置,赋值为1,或者++,然后通过求和来判断比当前 点 &quo ...

  6. poj 3321 Apple Tree(dfs序+树状数组求和模型)

    题目链接:http://poj.org/problem?id=3321 解题思路: 先dfs求出序列,将子树转化到dfs序列的区间内,接下来就是简单的树状数组求和模型了.水题. #include< ...

  7. poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)

    题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...

  8. POJ 2299 Ultra-QuickSort(树状数组 + 离散)

    链接:http://poj.org/problem?id=2299 题意:给出N个数组成的数列A(0 <= A[i] <= 999,999,999),求该数列逆序对的数量. 分析:题目所谓 ...

  9. POJ 1195 Mobile phones(裸的二维树状数组)

    http://poj.org/problem?id=1195 题意:给出一个矩阵,给某个格子加/减一个数,就某个子矩阵的和,1024*1024的范围,二维的树状数组 子矩阵(x1,y1,x2,y2)( ...

最新文章

  1. 摄像头Camera标定Calibration原理Theory
  2. (opencv)ORB匹配算法
  3. 从零开始一起学习SLAM | 三维空间刚体的旋转
  4. 硬盘安装WIN7方法
  5. 任意编程语言访问PostgreSQL:C++接口
  6. SQL Server replication requires the actual server name to make a connection to the server.错误解决...
  7. 在redhat enterprise 5 下安装ORACLE 10g
  8. 【设计模式】适配器模式
  9. 有关E45: ‘readonly‘ option is set (add!to override)错误的解决方法
  10. 【Git/GitHub/VSCode】Git提交时使用EMOJI表情、在VS Code中使用emoji commit
  11. postgres 判断null_PostgreSQL空值null参与运算的处理方法
  12. uniapp小程序更换头像
  13. CHOPS 音乐驱动动画2
  14. 美食小吃加盟网站源码 餐饮奶茶招商加盟类网站pbootcms模板 带安装视频教程【已测试】
  15. 网络流 - Drainage Ditches - HDU - 1532
  16. 基于小程序云开发的智慧物业、智慧小区微信小程序,在线报修报检,重大事项投票,报名参加小区活动,小区公告通知,业委会公示、租售房屋
  17. CC1310的SDK开发之IAR新建工程
  18. iis6.0 php漏洞,微软IIS 6.0和7.5的多个漏洞及利用方法
  19. 互联网日报 | 3月31日 星期三 | 小米正式进军智能电动汽车行业;滴滴小桔加油单日成交总额破亿;“中国天眼”正式对全球开放...
  20. 在快应用中使用安卓系统已安装浏览器(UC、360等)打开网页的方法

热门文章

  1. 2008引导修复 鼠标键盘用不了_这5个提高键盘鼠标生产力的工具,后悔没早点发现!...
  2. python3怎么安装mysql_Python3.7安装mysqlclient
  3. 16进制转base64_《蹲坑学K8S》之19-5:二进制部署Calico网络
  4. python 模拟键盘_Python模拟键盘输入和鼠标操作
  5. 系统学习机器学习之弱监督学习(三)--Adversarial Autoencoders
  6. 计算机科学与技术考研多少分算高分,清华计算机科学与技术系考研初复试高分经验分享...
  7. 微服务实现不同登陆_PaaS与IaaS在微服务架构实现方面的6大不同
  8. Java EE服务技术
  9. spark 读取elasticsearch数据
  10. Hive from_unixtime函数入门