题目传送门

逆序对

题目描述

猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对。知道这概念后,他们就比赛谁先算出给定的一段正整数序列中逆序对的数目。

输入输出格式

输入格式:

第一行,一个数n,表示序列中有n个数。

第二行n个数,表示给定的序列。

输出格式:

给定序列中逆序对的数目。

输入输出样例

输入样例#1: 复制

6
5 4 2 6 3 1
输出样例#1: 复制

11

说明

对于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 ;
}

洛谷P1908 逆序对 [权值线段树]的更多相关文章

  1. codevs1688 求逆序对(权值线段树)

    1688 求逆序对  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 给定一个序列a1,a2,…, ...

  2. 洛谷 P1908 逆序对 Label:归并排序||树状数组 不懂

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

  3. 洛谷P1908 逆序对

    P1908 逆序对 2.2K通过 4.4K提交 题目提供者该用户不存在 标签云端 难度普及/提高- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 归并排序党注意了!数组要开… ...

  4. 洛谷P1908 逆序对(线段树解法)

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

  5. 洛谷 P1908 逆序对

    \[传送门qwq\] 题目描述 猫猫\(TOM\)和小老鼠\(JERRY\)最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计. 最近,\(TOM\)老猫查阅 ...

  6. 洛谷P1908 逆序对【递归】

    题目:https://www.luogu.org/problemnew/show/P1908 题意:给定一个数组,求逆序对个数. 思路: 是一个很经典的题目了.通过归并排序可以求逆序对个数. 现在有一 ...

  7. 洛谷—— P1908 逆序对

    https://www.luogu.org/problem/show?pid=1908 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏, ...

  8. 洛谷 P1908 逆序对(归并排序解法)

    树状数组解法:https://www.cnblogs.com/lipeiyi520/p/10846927.html 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不 ...

  9. 洛谷 P1908 逆序对(树状数组解法)

    归并排序解法:https://www.cnblogs.com/lipeiyi520/p/10356882.html 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不 ...

随机推荐

  1. jsp 内置对象二

    1.什么是session ? (1)session 表示客户端与服务器的一次回话. 2)Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网 ...

  2. 【bzoj3362-导航难题】带权并查集

    题意: 约翰所在的乡村可以看做一个二维平面,其中有N 座牧场,每座牧场都有自己的坐标,编号为1到N.牧场间存在一些道路,每条道路道路连接两个不同的牧场,方向必定平行于X 轴或Y轴.连通两座牧场之间的路 ...

  3. 【vijos】P1083 小白逛公园

    [算法]线段树 [题解] 学自:https://vijos.org/p/1083/solution(wang_yanheng的回答) 回溯时维护一段区间的以下域: sumL:从左端点起连续区间的最大和 ...

  4. [Unity]用PropertyDrawer自定义struct/class的外观

    一般来说,当我们要扩展编辑器时,我们会从Editor类继承,为自己的MonoBehaviour实现不同的外观. 但是如果有一个struct/class,在许多地方被使用,Unity默认的外观又不够好看 ...

  5. hdu 1003 Max Sum (DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)   ...

  6. js函数定义方法

    1.函数声明 其语法为 function functionName(){ //函数体 } 首先是function关键字,然后是函数名,其重要特征是函数声明提升,即在执行代码之前会先读取函数声明,使其在 ...

  7. promise 如何知道所有的回调都执行完了?

    var fs = require('fs'); /** * @return {object} Promise */ function doThing(fileName) { // ... // con ...

  8. 从零开始PHP攻略(001)——Bob的汽车零部件商店

    1.创建订单表单 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  9. 源码分析之tinyhttpd-0.1

    1. 简介: tinyhttpd是使用c语言开发的超轻量级http服务器,通过代码流程可以了解http服务器的基本处理流程, 并且涉及了网络套接字,线程,父子进程,管道等等知识点: 项目地址:http ...

  10. Composer 手动安装

    Linux/Mac 环境 sudo wget -O /usr/local/bin/composer https://dl.laravel-china.org/composer.phar sudo ch ...