HDU 2492 树状数组
DES:按照位置编号给你选手的rank值。每场比赛要有一个裁判,位置和rank在两个选手之间。两场比赛裁判不同 或有一个选手不同则可以说 两场比赛不同。问你一共可以有多少场比赛。
思路是遍历每个人当裁判,找它左右两边比它大和小的数,交叉相乘。树状数组很好的应用。很巧妙。
附代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define maxn 100000
int c[maxn + 10], a[20000]; // a[i]是输入的数值。c[i]是比a[i]小的数有多少个。
int lowbit(int x)
{
return x & (-x);
}
int sum(int i)
{
int sum = 0;
while(i > 0)
{
sum += c[i];
i -= lowbit(i);
}
return sum;
}
void add(int pos, int val)
{
while(pos <= maxn)
{
c[pos] += val;
pos += lowbit(pos);
}
}
int l1[maxn], l2[maxn], r1[maxn], r2[maxn];
int main()
{
int t, n;
scanf("%d", &t);
while(t--)
{
int i;
memset(c,0,sizeof(c));
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&a[i]);
int k1;
k1=sum(a[i]);
l1[i]=k1; //输入的i个数中 有k1个比a[i]小
l2[i]=i-1-k1; //输入的i个数中 有k1个比a[i]大
add(a[i],1);
}
memset(c,0,sizeof(c));
int j=1;//代表现在输入的数的个数
for(i=n; i>=1; i--,j++)
{
int k1;
k1=sum(a[i]);
r1[i]=k1;//输入a[i]后输入的那些数中有多少个比a[i]小的
r2[i]=j-1-k1; //输入a[i]后输入的那些数中有多少个比a[i]大的
add(a[i],1);
}
__int64 ans=0;
for(i=1; i<=n; i++)
{
ans+=l1[i]*r2[i]+l2[i]*r1[i];
}
printf("%I64d\n", ans);
}
return 0;
}
HDU 2492 树状数组的更多相关文章
- hdu 2492 树状数组 Ping pong
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Ping pong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 3 ...
- hdu 4638 树状数组 区间内连续区间的个数(尽可能长)
Group Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdu 4777 树状数组+合数分解
Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 2852 (树状数组+无序第K小)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2852 题目大意:操作①:往盒子里放一个数.操作②:从盒子里扔掉一个数.操作③:查询盒子里大于a的第K小 ...
- HDU 4911 (树状数组+逆序数)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4911 题目大意:最多可以交换K次,就最小逆序对数 解题思路: 逆序数定理,当逆序对数大于0时,若ak ...
- hdu 5792(树状数组,容斥) World is Exploding
hdu 5792 要找的无非就是一个上升的仅有两个的序列和一个下降的仅有两个的序列,按照容斥的思想,肯定就是所有的上升的乘以所有的下降的,然后再减去重复的情况. 先用树状数组求出lx[i](在第 i ...
- HDU 1934 树状数组 也可以用线段树
http://acm.hdu.edu.cn/showproblem.php?pid=1394 或者是我自己挂的专题http://acm.hust.edu.cn/vjudge/contest/view. ...
- 2018 CCPC网络赛 1010 hdu 6447 ( 树状数组优化dp)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 思路:很容易推得dp转移公式:dp[i][j] = max(dp[i][j-1],dp[i-1][j ...
- 【模板】HDU 1541 树状数组
http://acm.hdu.edu.cn/showproblem.php?pid=1541 题意:给你一堆点,每个点右一个level,为其右下方所有点的数量之和,求各个level包含的点数. 题解: ...
随机推荐
- java使用itex读取pdf,并搜索关键字,为其盖章
导读:近期要做一个根据关键字定位pdf的盖章位置的相关需求,其中关键字可配置多个(包含pdf文档中可能不存在的关键字),当页面显示盖章完成时,打开pdf显示已经损坏. 排查后发现,当itext搜索的关 ...
- Python3基础 逻辑运算 and or not 示例
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Linux内存管理--用户空间和内核空间【转】
本文转载自:http://blog.csdn.net/yusiguyuan/article/details/12045255 关于虚拟内存有三点需要注意: 4G的进程地址空间被人为的分为两个部分--用 ...
- [shiro] - 怎样使用shiro?
shiro是什么? Shiro是apache旗下的一个开源框架, 它将软件系统的安全认证相关的功能抽取出来, 实现用户身份认证, 权限授权, 加密, 会话管理等功能, 组成一个通用的安全认证框架. 为 ...
- Python Sip [RuntimeError: the sip module implements API v11.0 to v11.2 but the PyQt5.QtCore module requires API v11.3]
不知道原因,尝试卸载.编译安装均失败.只有这样曲线救国 import matplotlib matplotlib.use("WXAgg",warn=True) import mat ...
- hibernate报错 java.lang.StackOverflowError: null
在使用hibernate时,报错 java.lang.StackOverflowError: null 把当前线程的栈打满了 java.lang.StackOverflowError: null at ...
- 获取公网IP地址
https://ipip.yy.com/get_ip_info.php http://pv.sohu.com/cityjson?ie=utf-8 http://www.ip168.com/json.d ...
- 升级php7一些需要注意的地方
1.升级过程涉及代码的主要处理的就是几个扩展(mysql.mssql .mcrypt.ereg)使用到的一些废弃函数(call_user_method.call_user_method_array等) ...
- 代码中特殊的注释技术 -- TODO、FIXME和XXX的用处
借鉴地址:https://www.cnblogs.com/pengyingh/articles/2445826.html 在阅读一些代码时,经常会遇到诸如:TODO.FIXME和XXX的单词,它们是有 ...
- 字符集(编码)转换_Qt532_QString
1.网上的资料: 1.1.参考网址:http://blog.csdn.net/changsheng230/article/details/6588447 1.2.网页内容: “ Qt 使用Unicod ...