http://codeforces.com/problemset/problem/61/E

题意是求 i<j<k && a[i]>a[j]>a[k] 的对数

会树状数组求逆序数的话,这个推一下就能出结果:
做法:
1、离散化,由于a[i]能够达到1e9

2、插入a[i]的时候,记录x[i]=i-sum(a[i]); a[i]之前比a[i]大的有x[i]个

3、插入完毕后,求a[i] 之后比a[i]小的数的个数y[i]

ans=segma(x[i]*y[i])   注意x[i]*y[i]会超出int  由于这wa了一次

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <map>
#include <set>
#include <queue>
using namespace std;#define ls(rt) rt*2
#define rs(rt) rt*2+1
#define ll long long
#define ull unsigned long long
#define rep(i,s,e) for(int i=s;i<e;i++)
#define repe(i,s,e) for(int i=s;i<=e;i++)
#define CL(a,b) memset(a,b,sizeof(a))
#define IN(s) freopen(s,"r",stdin)
#define OUT(s) freopen(s,"w",stdout)
const ll ll_INF = ((ull)(-1))>>1;
const double EPS = 1e-8;
const int INF = 100000000;
const int MAXN  = 1e6+100;
ll x[MAXN],y[MAXN];
int a[MAXN],tmp[MAXN];
ll c[MAXN];
int n;inline int lowb(int x) {return x&(-x);}void update(int x, int d)
{while(x<=n){c[x]+=d;x+=lowb(x);}
}ll sum(int x)
{ll ret=0;while(x>0){ret+=c[x];x-=lowb(x);}return ret;
}bool cmp(const int i, const int j)
{return a[i]<a[j];
}void dis()
{sort(tmp+1,tmp+1+n,cmp);int tt=0,pre=a[tmp[1]]-1;for(int i=1;i<=n;i++){if(pre!=a[tmp[i]]){pre=a[tmp[i]];a[tmp[i]]=++tt;}elsea[tmp[i]]=tt;}
}int main()
{//IN("B.txt");ll ans=0;while(~scanf("%d",&n)){for(int i=1;i<=n;i++){scanf("%d",&a[i]);tmp[i]=i;}dis();//*for(int i=1;i<=n;i++){printf("a[%d]=%d\n",i,a[i]);}*//CL(c,0);ans=0;for(int i=1;i<=n;i++){update(a[i],1);x[i]=i-sum(a[i]);//a[i]之前比a[i]大的有`x[i]个y[i]=sum(a[i]-1);//a[i]之前比a[i]小的数}for(int i=1;i<=n;i++){y[i]=sum(a[i]-1)-y[i];//a[i] 之后比a[i]小的数的个数ans+=x[i]*y[i];}//* for(int i=1;i<=n;i++)printf("i=%d x=%d y=%d\n",i,x[i],y[i]);*//printf("%I64d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/zfyouxi/p/4009611.html

CF 61E 树状数组+离散化 求逆序数加强版 三个数逆序相关推荐

  1. 树状数组 + 离散化 求逆序对数量

    AcWing 788. 逆序对的数量 #include <bits/stdc++.h> using namespace std;typedef long long ll; const in ...

  2. 求逆序数数目(树状数组+离散化)

    404在玩忍者印记(Mark of the Ninja)操纵忍者时遇到这样一个场景,两栋大楼之间有许多绳索,从侧面看,就像这个样子: 我们的忍者非常有好奇心,他可以观察到每个绳索的端点在两栋楼的高度, ...

  3. 树状数组(求子区间和+更新元素值)

    树状数组 欲完成修改值和查询区间和两种操作 求前缀和的做法时间复杂度为O(n)O(n)O(n) 使用树状数组时间复杂度降为O(logn)O(logn)O(logn) lowbit 1.x&(- ...

  4. 洛谷 P1908 逆序对(树状数组+离散化)

    题目描述 猫猫 TOM 和小老鼠 JERRY 最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计. 最近,TOM 老猫查阅到一个人类称之为"逆序对& ...

  5. 树状数组(求逆序对)

    一.树状数组是什么 树状数组,又称二进制索引树,英文名Binary Indexed Tree 之前遇到一个求逆序对的题,看了很多题解都只说了这个树状数组,关于怎么实现的全都避而不谈,我研究了一下午,总 ...

  6. 树状数组 _ 求逆序数

    注: 本文只是记录  ,您将从上面学习不到任何知识,除了 代码 (废话)第一次接触到树状数组,感觉接触到了新世界,理解这个思想用了好长时间,终于弄明白了(似懂非懂). 还有接触到了  离散化的思想, ...

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

    题目大意: 就是说,给你一个序列,然后让你求出这个序列有多少个逆序对,所谓逆序对就是对于这个序列中的元素有a[i]>a[j] 且i<j存在. 其实原题是这样说的,给你一个序列,让你用最少的 ...

  8. hdu_2227_Find the nondecreasing subsequences_树状数组,离散化

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2227 题意:给你一个集合,让你求递增子序列有多少个,和树状数组求逆序对差不多,不过数据比较大,要离散化 ...

  9. Codeforces Beta Round #57 (Div. 2)E---Enemy is weak(树状数组+离散化)

    The Romans have attacked again. This time they are much more than the Persians but Shapur is ready t ...

  10. 斜率小于0的连线数量 51Nod - 1107 (树状数组+离散化)

    二维平面上N个点之间共有C(n,2)条连线.求这C(n,2)条线中斜率小于0的线的数量. 二维平面上的一个点,根据对应的X Y坐标可以表示为(X,Y).例如:(2,3) (3,4) (1,5) (4, ...

最新文章

  1. 为Eclipse IDE for Java Developers安装插件,让其有Server和Project facets
  2. 应用存储和持久化数据卷:存储快照与拓扑调度(至天)
  3. 单链表反转的原理和python代码实现
  4. 使用Subversion版本标识符
  5. freemarke之TemplateDirectiveModel详解
  6. 国家有线网挂牌时间再度推迟 预计为2012年底
  7. android NDK c++ library
  8. python之邮件发送自动化
  9. HttpsessionListener 实现在线人数统计
  10. 【Python】实现商品信息管理系统(界面版,附带数据库)
  11. 计算机信息技术学ps吗,小学信息技术photoshop教案.docx
  12. Qualcomm Ramdump debugging
  13. 用java设置网页背景图片_JAVA设置背景图片
  14. 合成全身火焰燃烧人物海报图片的PS教程
  15. c语言P0=0x是什么意思,0x80(单片机0x80什么意思)
  16. Python搭建tensorflow三层神经网络
  17. 世界首富用 AI 开除混吃混喝的“兄弟”
  18. html首页我的待办,我的待办.html
  19. python 3爬取 12306余票
  20. 优惠券系统-第三章-活动中心

热门文章

  1. macBook户外省电有技巧,2招即可找出高耗电应用
  2. macOS的Fn键实用技巧分享
  3. 如何使用ExpressBurn Plus mac版刻录数据CD
  4. Mac电脑卡在启动模式了怎么办?
  5. 10次课( find命令、文件名后缀)
  6. svn版本备份和恢复注意事项
  7. 十步叫你如何无损修复硬盘锁(mbr病毒)
  8. 设计模式之Facade---外观模式
  9. 《从零开始学Swift》学习笔记(Day 13)——数据类型之整型和浮点型
  10. viewpager中fragment的生命周期管理