poj 3928 树状数组
题目中只n个人,每个人有一个ID和一个技能值,一场比赛需要两个选手和一个裁判,只有当裁判的ID和技能值都在两个选手之间的时候才能进行一场比赛,现在问一共能组织多少场比赛。
由于排完序之后,先插入的一定是小的,所以左右两边的大于小于都能确定,用树状数组维护选手的id
Sample Input
1
3 1 2 3
Sample Output
1
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
int n,m,t;
const int maxn=;
__int64 c[maxn];
struct node
{
int x,id;
}p[maxn+];
bool cmp(node a,node b)
{
return a.x<=b.x;
}
int lowbit(int i)
{
return i&(-i);
}
void add(int i,__int64 d)
{
while(i<=maxn)
{
c[i]+=d;
i+=lowbit(i);
}
}
__int64 sum(int i)
{
__int64 ret=;
while(i)
{
ret+=c[i];
i-=lowbit(i);
}
return ret;
}
int main()
{
int i,j,k;
__int64 lmin,lmax,rmin,rmax,ans=;
//freopen("1.in","r",stdin);
scanf("%d",&t);
while(t--)
{
for(i=;i<=maxn;i++) c[i]=;
scanf("%d",&n);
for(i=;i<=n;i++) scanf("%d",&p[i].x),p[i].id=i;
sort(p+,p++n,cmp);
add(p[].id,);
for(i=;i<n;i++)
{
lmin=sum(p[i].id-); //计数是从1到i-1,故要多减一个1
lmax=p[i].id--lmin;
//printf("%I64d %I64d ",lmin,lmax);
rmin=sum(n)-sum(p[i].id);
rmax=n-p[i].id-rmin;
//printf("%I64d %I64d \n",rmin,rmax);
ans+=(lmin*rmax+rmin*lmax); add(p[i].id,);
//printf("%I64d\n",ans);
}
printf("%I64d\n",ans);
ans=;
}
return ;
}
poj 3928 树状数组的更多相关文章
- POJ 3321 树状数组(+dfs+重新建树)
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27092 Accepted: 8033 Descr ...
- POJ 2352Stars 树状数组
Stars Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 42898 Accepted: 18664 Descripti ...
- poj 2299 树状数组求逆序数+离散化
http://poj.org/problem?id=2299 最初做离散化的时候没太确定可是写完发现对的---由于后缀数组学的时候,,这样的思维习惯了吧 1.初始化as[i]=i:对as数组依照num ...
- POJ 2299 树状数组+离散化求逆序对
给出一个序列 相邻的两个数可以进行交换 问最少交换多少次可以让他变成递增序列 每个数都是独一无二的 其实就是问冒泡往后 最多多少次 但是按普通冒泡记录次数一定会超时 冒泡记录次数的本质是每个数的逆序数 ...
- poj 2299 树状数组求逆序对数+离散化
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 54883 Accepted: 20184 ...
- poj 2182 树状数组
这题对于O(n^2)的算法有很多,我这随便贴一个烂的,跑了375ms. #include<iostream> #include<algorithm> using namespa ...
- POJ 2352 树状数组
学习自:链接以及百度百科 以及:https://www.bilibili.com/video/av18735440?from=search&seid=363548948825132979 理解 ...
- POJ 2299树状数组求逆序对
求逆序对最常用的方法就是树状数组了,确实,树状数组是非常优秀的一种算法.在做POJ2299时,接触到了这个算法,理解起来还是有一定难度的,那么下面我就总结一下思路: 首先:因为题目中a[i]可以到99 ...
- MooFest POJ - 1990 (树状数组)
Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...
随机推荐
- 自定义cell的步骤(每个cell的高度不一样,每个cell里面显示的内容也不一样)
1.新建一个继承自UITableViewCell的子类 2. 在initWithStyle:方法中进行子控件的初始化 1> 将有可能显示的所有子控件都添加到contentView中 2> ...
- mysql 自连接
SELECT语句中的自连接. 到目前为止,我们连接的都是两张不同的表,那么能不能对一张表进行自我连接呢?答案是肯定的. 有没有必要对一张表进行自我连接呢?答案也是肯定的. 表的别名: 一张表可以自我连 ...
- Homebrew安装
1. 安装Command Line Tools 终端输入 xcode-select --install 回车,若下载慢,可搜索Command line Tools的pkg文件,自行安装. 或者直接安装 ...
- 连接oracle读取数据
没怎么用过oracle,而且是在地税内网内部估计是防火墙的原因虚拟机里也连不上oracle,刚开始费了很多周折查找问题,现在又放弃使用直连数据库了,记下来以备后用吧 public class Load ...
- Java读取word文档,转换为网页
public class Test3 { /** * * @param path * @param paths * @param savepaths */ public static void cha ...
- C# 检测操作系统是否空闲,实现系统空闲后做一些操作
public class CheckComputerFreeState { /// <summary> /// 创建结构体用于返回捕获时间 /// </summary> [St ...
- SqlServer Link 链接服务器的使用
--创建linked exec sp_addlinkedserver 'a','','SQLNCLI','your ipaddress' --登陆linked exec sp_addlinkedsrv ...
- C#比较时间大小 1、比较时间大小的实验
1.比较时间大小的实验 string st1="12:13"; string st2="14:14"; DateTime dt1=Convert.ToDa ...
- java笔记--适配器模式的运用
适配器模式的运用 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3884785.html "谢谢-- 主要应用: 可以在符合 ...
- [BZOJ3872][Poi2014]Ant colony
[BZOJ3872][Poi2014]Ant colony 试题描述 There is an entrance to the ant hill in every chamber with only o ...