Enemy is weak

求序列 \(a\{n\}\) 中的三元逆序对数量。

数据范围:\(3\le n\le 1e6\)。


这题真是一道又好又水的题,可是我看别人的题解做法真是玄学难懂,于是蒟蒻要写一篇简单易懂的。


考虑到二元逆序对的做法:离散化后动态维护一个权值树状数组。

其中对于每个当做逆序对后一元的 \(i\),当做逆序对前一元的 \(j(j<i,a_j>a_i)\) 的贡献为 \(1\),\(i\) 为总答案的贡献为 \(s_i=\sum_{j=1}^{i-1}[a_j>a_i]\)。

其实求三元逆序对同样可以离散化后动态维护一个权值树状数组。

其中对于每个当做逆序对后一元的 \(i\),当做逆序对前一元的 \(j(j<i,a_j>a_i)\) 的贡献为 \(s_j\),\(i\) 为总答案的贡献为 \(S_i=\sum_{j=1}^{i-1}[a_j>a_i]s_j\)。

所以总共维护两个权值树状数组即可。


空间复杂度 \(\Theta(n)\),时间复杂度 \(\Theta(n\log n)\)。


小蒟蒻讲不清楚,小蒟蒻还是太蒻了 \(/kk\)。小蒟蒻放个代码吧,记得树状数组要开 \(\texttt{long long}\):

//Data
const int N=1e6;
int n,a[N+7],b[N+7];
lng ans; //Bittree
typedef vector<lng> bit;
bit c1(N+7),c2(N+7);
void add(bit&c,int x,lng y){for(;x<=n;x+=x&-x) c[x]+=y;}
lng sum(bit&c,int x){lng res=0;for(;x;x-=x&-x) res+=c[x];return res;}
lng sum(bit&c,int x,int y){return sum(c,y)-sum(c,x-1);} //Main
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i];
sort(b+1,b+n+1);
for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+n+1,a[i])-b;
for(int i=1;i<=n;i++) ans+=sum(c2,a[i]+1,n),add(c2,a[i],sum(c1,a[i]+1,n)),add(c1,a[i],1);
printf("%lld\n",ans);
return 0;
}

祝大家学习愉快!

题解-Enemy is weak的更多相关文章

  1. E. Enemy is weak 解析(思維、離散化、BIT、線段樹)

    Codeforce 61 E. Enemy is weak 解析(思維.離散化.BIT.線段樹) 今天我們來看看CF61E 題目連結 題目 給一個數列\(a\),求有多少\((i,j,k)\),\(i ...

  2. CodeForces - 61E Enemy is weak

    Description The Romans have attacked again. This time they are much more than the Persians but Shapu ...

  3. cf 61 E. Enemy is weak 离散化+树状数组

    题意: 给出一个数组,数组的每一个元素都是不一样的,求出对于3个数组下标 i, j, k such that i < j < k and ai > aj > ak where ...

  4. cf 61E. Enemy is weak 树状数组求逆序数(WA) 分类: Brush Mode 2014-10-19 15:16 104人阅读 评论(0) 收藏

    #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> ...

  5. Codeforces 61E Enemy is weak 乞讨i&lt;j&lt;k &amp;&amp; a[i]&gt;a[j]&gt;a[k] 对数的 树阵

    主题链接:点击打开链接 意大利正在寻求称号 i<j<k && a[i]>a[j]>a[k] 的对数 假设仅仅有2元组那就是求逆序数的做法 三元组的话就用一个树状 ...

  6. Codeforces Beta Round #57 (Div. 2) E. Enemy is weak

    求满足条件的三元组的个数,可以转换求一元组和二元组组成的满足条件的三元组的个数,且对于(x),(y,z),x > y,且x出现的p_x < p_y. x可直接枚举O(n),此时需要往后查询 ...

  7. Codeforces Beta Round #57 (Div. 2) A,B,C,D,E

    A. Ultra-Fast Mathematician time limit per test 2 seconds memory limit per test 256 megabytes input ...

  8. Risk UVA - 12264 拆点法+最大流+二分 最少流量的节点流量尽量多。

    /** 题目:Risk UVA - 12264 链接:https://vjudge.net/problem/UVA-12264 题意:给n个点的无权无向图(n<=100),每个点有一个非负数ai ...

  9. IOS的一个关于球碰撞的小游戏

    这个游戏是关于一个球随机在屏幕上移动,能够用手指来操纵令一个球,假设两个球碰撞到一起,就表示输了,很easy的一个游戏 在StoryBoard里定义两个UIImageView和一个startbutto ...

随机推荐

  1. redis-server文件启动cmd一闪而过

    工作上需要在本地装redis,所以就帮别人排查了一个问题,就是redis服务双击了之后不能起来,就是一个黑色的cmd框一闪而过,正常的是这样的: 然而,我当时第一次接触windows上的redis服务 ...

  2. 重置ubuntu13.04 密码

    方法如下: Restart Machine HOLD Shift Button ( You will get message "GRUB Loading") Select the ...

  3. Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官!

    ​ 前一篇<不要再说不会Spring了!Spring第一天,学会进大厂!>文章可点击下方链接进行回看. 不要再说不会Spring了!Spring第一天,学会进大厂! 今天将继续讲解Spri ...

  4. linux打包 压缩 解压tar常归操作

    tar 打包 tar -cvf 打包后路径和文件名.tar 需要打包的路径和文件压缩 tar -zcvf 打包后路径和文件名.tar.gz 需要打包的路径和文件解压 tar -xvf 包名 -C 路径 ...

  5. 深度分享:面试阿里,字节跳动,美团90%会被问到的HashMap知识

    一,HashTable 哈希表,它相比于hashMap结构简单点,它没有涉及红黑树,直接使用链表的方式解决哈希冲突. 我们看它的字段,和hashMap差不多,使用table存放元素 private t ...

  6. 面试官:小伙子,你给我说一下你对MySQL索引的理解吧

    一.索引是什么? 索引是帮助MySQL高效获取数据的数据结构. 二.索引能干什么? 索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引能够轻易将查询性能提高好几个数量级,总 ...

  7. CentOS7.X 下安装MySQL8.0(附文件)

    这是64位的安装包.如果需要32位的可以去官网下载哦.步骤一样 1 获取安装资源包 mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar 链接: https://pan.b ...

  8. Codeforces Round #631 (Div. 1) B. Dreamoon Likes Sequences 题解(思维+求贡献)

    题目链接 题目大意 让你构造一个严格单调上升的数组a满足\(1<=a_1<a_2<....a_n<=d\) 而且要使得这个数组的异或前缀和也满足严格单调上升,求有多少个满足条件 ...

  9. FL Studio——电音编曲人的奠基石

    随着近年来摇滚.电音的发展,越来越多的人开始对电子音乐编曲感兴趣,而电音编曲的首要条件,就是需要一个好的DAW(数字音频工作站),常用的DAW有很多,例如Cubase.Nuendo.Pro Tools ...

  10. 快要C语言考试了,大学生们收好这些经典程序案例,包你考试过关!

    距离考试越来越近 编程大佬早已饥渴难耐 电脑小白还在瑟瑟发抖 但是不要怕! 来看看这些经典程序案例 包你考试过关! [程序1] 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多 ...