一共6种情况,a < b且Aa < Ab, c < d 且Ac > Ad,这两种情况数量相乘,再减去a = c, a = d, b = c, b = d这四种情况,使用树状数组维护,le[i]表示i左边比他小的数数量,le1[i]表示i左边比他大的数数量,ri[i]表示i右边比他小的数数量,ri1[i]表示i右边比他大的数数量。

  跑两次树状数组,求出这四个数组值。

  注意处理数值相等的情况。

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
#include<utility>
using namespace std;
typedef long long LL;
const int N = 60008, INF = 0x3F3F3F3F;
#define MS(a, num) memset(a, num, sizeof(a))
#define PB(A) push_back(A)
#define FOR(i, n) for(int i = 0; i < n; i++)
int C[N];
int n;
int le[N], ri[N], le1[N], ri1[N];
int val[N];
int b[N], tp[N];
inline int lowbit(int x){
return x&-x;
}
inline void add(int x, int val){
for(int i=x;i<=n;i+=lowbit(i)){
C[i] += val;
}
}
inline int sum(int x){
int ret = 0;
for(int i=x;i>0;i-=lowbit(i)){
ret+=C[i];
}
return ret;
} int main(){
while(~scanf("%d", &n)){
for(int i = 1; i <= n; i++){
scanf("%d", &val[i]);
tp[i] = val[i];
} sort(val + 1, val + n + 1);
for(int i = 1; i <= n; i++){
b[i] = lower_bound(val + 1, val + n + 1, tp[i]) - val;
}
MS(C , 0);
for(int i = 1; i <= n; i++){
le[i] = sum(b[i] - 1);
le1[i] = sum(n) - sum(b[i]);
add(b[i], 1);
} MS(C, 0);
for(int i = n; i >= 1; i--){
ri[i] = sum(b[i] - 1);
ri1[i] = sum(n) - sum(b[i]);
add(b[i], 1);
}
LL ans= 0;
LL sum = 0;
for(int i = n; i >= 1; i--){
sum += ri1[i];
}
ans = sum;
sum = 0;
for(int i = n; i >= 1; i--){
sum += ri[i];
}
ans *= sum;
sum = 0;
for(int i = 1; i <= n; i++){
sum += (LL)ri[i] * (LL)ri1[i];
sum += (LL)ri1[i] * (LL)le1[i];
sum += (LL)le[i] * (LL)le1[i];
sum += (LL)le[i] * (LL)ri[i];
}
ans -= sum;
printf("%I64d\n", ans);
}
return 0;
}

  

HDU5792 World is Exploding(树状数组)的更多相关文章

  1. 2016 Multi-University Training Contest 5 1012 World is Exploding 树状数组+离线化

    http://acm.hdu.edu.cn/showproblem.php?pid=5792 1012 World is Exploding 题意:选四个数,满足a<b and A[a]< ...

  2. World is Exploding 树状数组+离散化

    Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a<b≤n,1≤ ...

  3. HDU 5792 World is Exploding 树状数组+枚举

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5792 World is Exploding Time Limit: 2000/1000 MS (Ja ...

  4. hdu 5792 World is Exploding 树状数组+离散化+容斥

    World is Exploding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  5. hdu_5792_World is Exploding(树状数组+逆序对)

    题目链接:hdu_5792_World is Exploding 题意: 给你一个数列,让你找有多少个(a,b,c,d)满足a≠b≠c≠d,1≤a<b≤n,1≤c<d≤n,Aa<Ab ...

  6. hdu 5792 World is Exploding 树状数组

    World is Exploding 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5792 Description Given a sequence ...

  7. hdu-5792 World is Exploding(容斥+树状数组)

    题目链接: World is Exploding Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Jav ...

  8. HDU-5792 World is Exploding(树状数组)

    题目大意:给一个整数序列,统计四元组(a,b,c,d)的个数,满足条件1:a<>b<>c<>d:条件2:<a,b>组成一个顺序对,<c,d> ...

  9. hdu5792 World is Exploding(多校第五场)树状数组求逆序对 离散化

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5792 题目描述:给你n个值,每个值用A[i]表示,然后问你能否找到多少组(a,b,c,d)四个编号,四 ...

随机推荐

  1. 36 网络相关函数(四)——live555源码阅读(四)网络

    36 网络相关函数(四)——live555源码阅读(四)网络 36 网络相关函数(四)——live555源码阅读(四)网络 简介 7)createSocket创建socket方法 8)closeSoc ...

  2. 5-python学习——条件语句

    5-python学习——条件语句 5-python学习——条件语句 条件语句if else形式 if else条件语句说明 测试一下 编程语言一般都由这么几个部分组成 变量 条件分支语句 循环语句 函 ...

  3. 20 BasicTaskScheduler0 基本任务调度类基类(二)——Live555源码阅读(一)任务调度相关类

    这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...

  4. bootstrap常用的定义风格

    primary()     首选项 success()     成功 info()        一般信息 warning()       警告 danger()         危险 <bod ...

  5. Iterator中hasNext(), next() 和ResultSet结果集的next方法的区别

    接口 Iterator专门的迭代输出接口,将元素一个个进行判断,用hasNext() 判断是否有值,用next()方法把元素取出.hasNext() 如果仍有元素可以迭代,则返回 true.next( ...

  6. ubuntu hash sum mismatch error

    $ sudo rm -rf /var/lib/apt/lists/* $ sudo apt-get update from: askubuntu.com

  7. poj 1276

    一道DP的题目,还是一道多重背包的题目,第一次接触. 题意:有现今cash,和n种钱币,每种钱币有ni个,价值为di,求各种钱币组成的不超过cash的最大钱数 思路:可以转换为0/1背包和完全背包来做 ...

  8. K3数据库表结构

    K3数据库表结构查看方法,直接在数据库中打开表 t_TableDescription,其中即各表及其与K3功能的对应关系 也可直接查询: select * from t_TableDescriptio ...

  9. 2.openstack之mitaka搭建控制节点数据库和消息队列

    一:部署mariadb数据库 控制节点(192.168.11.103): yum install mariadb mariadb-server python2-PyMySQL -y 编辑: /etc/ ...

  10. UVALive 4953 Wormly--【提醒自己看题要仔细】

    有一条虫要过桥,桥有断的木板和好的木板.虫有L条腿B个身体,桥长N.01串表示桥的好坏.输出最少操作次数. 一开始虫的身体在最左B桥上,腿在最左L桥上,最后要到达最右B以及最右L... 操作有2种:① ...