洛谷P1908 逆序对 [权值线段树]
2024-09-04 12:57:16
逆序对
题目描述
猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对。知道这概念后,他们就比赛谁先算出给定的一段正整数序列中逆序对的数目。
输入输出格式
输入格式:
第一行,一个数n,表示序列中有n个数。
第二行n个数,表示给定的序列。
输出格式:
给定序列中逆序对的数目。
输入输出样例
说明
对于50%的数据,n≤2500
对于100%的数据,n≤40000。
分析:
用归并或者树状数组都可以轻易A掉,但是这里用权值线段树。可以算是一道权值线段树的模板题。用于理解权值线段树。
Code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+;
int n,p[maxn];ll ans;
struct Num{
int id,val;
}a[maxn];
struct Seg{
int l,r;ll val;
}seg[maxn<<];
inline void pushup(int rt)
{
seg[rt].val=seg[rt<<].val+seg[rt<<|].val;
}
inline void build(int l,int r,int rt)
{
seg[rt].l=l,seg[rt].r=r;
if(l==r){seg[rt].val=;return;}
int mid=(l+r)>>;
build(l,mid,rt<<);
build(mid+,r,rt<<|);
}
inline void update(int rt,int x)
{
if(seg[rt].l==seg[rt].r&&seg[rt].l==x){
seg[rt].val++;return;}
int mid=(seg[rt].l+seg[rt].r)>>;
if(x<=mid)update(rt<<,x);
if(x>mid)update(rt<<|,x);
pushup(rt);
}
inline ll quary(int rt,int l,int r)
{
if(seg[rt].l>r||seg[rt].r<l)return ;
if(l<=seg[rt].l&&seg[rt].r<=r)
return seg[rt].val;
int mid=(seg[rt].l+seg[rt].r)>>;int ret=;
if(l<=mid)ret+=quary(rt<<,l,r);
if(r>mid)ret+=quary(rt<<|,l,r);
return ret;
}
bool cmp(Num x,Num y)
{return x.val<y.val;}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
build(,maxn,);
for(int i=;i<=n;i++)
cin>>a[i].val,a[i].id=i;
sort(a+,a+n+,cmp);
for(int i=;i<=n;i++)
p[a[i].id]=i;
for(int i=;i<=n;i++){
ans+=quary(,p[i]+,maxn);
update(,p[i]);}
cout<<ans<<"\n";
return ;
}
最新文章
- 30行代码搞定WCF并发性能测试
- HT for Web基于HTML5的图像操作(三)
- js验证手机号输入是否符合规则
- Edius 安装 looks插件整理
- java中|与||有什么区别?那么&;与&;&;呢
- redux源码解读(二)
- laravel+Redis简单实现队列通过压力测试的高并发处理
- Vbox隐藏虚拟机,实现后台运行
- [Python] 个人TIPS
- linux学习记录.6.vscode调试c makefile
- Battery historian安装及使用
- JS中常用的Math方法
- setInterval()、clearInterval()、setTimeout()和clearTimeout() js计数器方法(还有第三个参数)
- linux命令学习(6):ps命令
- ValueError: too many values to unpack tensorflow
- 【代码审计】iZhanCMS_v2.1 前台GoodsController.php页面存在SQL注入漏洞分析
- Unity 之 Time
- java Object解析
- HEVC有损优化二
- linux 编译win32程序
热门文章
- unity ugui缩放+移动
- 【HDU】6012 Lotus and Horticulture (BC#91 T2)
- html+js实现的触屏版贪吃蛇
- lnmp、lamp、lnmpa一键安装包(Updated: 2016-4-12)
- 控制 Cookie 的作用范围
- net_dev_init
- 【UOJ#9】vfk的数据
- 【模板】BZOJ 1692:队列变换—后缀数组 Suffix Array
- 10 个打造 React.js App 的最佳 UI 框架
- clearcase command (windows 常用的几个)