AcWing 楼蓝图腾(树状数组维护逆序对)

Posted mb62d0ca5a0a625

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 楼蓝图腾(树状数组维护逆序对)相关的知识,希望对你有一定的参考价值。


链接

题意:

给出你一段序列,让你找出yig9ong多少先增后减和多少先减后增的三元组。

分析:

用树状数组维护逆序对。先正序维护一个逆序对,再倒序维护逆序对,两两相乘再求和即可。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn= 2e5+7;

ll n;
ll a[maxn];
ll tree[maxn];

ll lowbit(ll x)
return x&(-x);

void update(ll x,ll d)
while(x<=n)
tree[x]+=d;
x+=lowbit(x);


ll query(ll x)
ll ans=0;
while(x>0)
ans+=tree[x];
x-=lowbit(x);

return ans;

ll l[maxn],r[maxn];
int main()
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
l[i]=query(a[i]-1);
r[i]=query(n)-query(a[i]);
update(a[i],1);

ll ans1=0;
ll ans2=0;
memset(tree,0,sizeof tree);
for(int i=n;i>=1;i--)
ans1+=l[i]*query(a[i]-1);
ans2+=r[i]*(query(n)-query(a[i]));
update(a[i],1);

cout<<ans2<<" "<<ans1<<endl;

return 0;


以上是关于AcWing 楼蓝图腾(树状数组维护逆序对)的主要内容,如果未能解决你的问题,请参考以下文章

CCPC河南省赛B-树上逆序对| 离线处理|树状数组 + 线段树维护逆序对 + dfs序 + 离散化

用树状数组处理逆序对[数据结构][树状数组]

树状数组求逆序对

Another Version of Inversion 二维树状数组求逆序对

COGS 1715 & bzoj 3295 [CQOI2011]动态逆序对 题解

hdu1394(枚举/树状数组/线段树单点更新&区间求和)