1688 求逆序对

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 查看运行结果
 
 
题目描述 Description

给定一个序列a1,a2,…,an,如果存在i<j并且ai>aj,那么我们称之为逆序对,求逆序对的数目

数据范围:N<=105。Ai<=105。时间限制为1s。

输入描述 Input Description

第一行为n,表示序列长度,接下来的n行,第i+1行表示序列中的第i个数。

输出描述 Output Description

所有逆序对总数.

样例输入 Sample Input

4

3

2

3

2

样例输出 Sample Output

3

/*
权值线段树模板
首先我们更改线段树叶子节点处存储的内容,将其更改为权值,并且记录对于一个权值x的个数。
那么我们首先构建一棵空树,
对于每次插入的数字x,我们查找x+1到max区间的数字存在的个数,并将这个个数加入答案,
然后插入这个数字。最后输出答案就可以了。。
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 200007 using namespace std;
int n,x;
long long ans;
struct tree
{
int l,r;
long long sum;
}tr[N<<]; void push_up(int now)
{
tr[now].sum=tr[now<<].sum+tr[now<<|].sum;
} void build(int now,int l,int r)
{
tr[now].l=l;tr[now].r=r;
if(l==r) return;
int mid=(tr[now].l+tr[now].r)>>;
build(now<<,l,mid);build(now<<|,mid+,r);
} void insert(int now,int k)
{
if(tr[now].l==k && tr[now].l==tr[now].r)
{
tr[now].sum++;
return;
}
int mid=(tr[now].l+tr[now].r)>>;
if(x>mid) insert(now<<|,k);
if(x<=mid) insert(now<<,k);
push_up(now);
} long long gets(int now,int l,int r)
{
if(tr[now].l>r||tr[now].r<l) return ;
if(tr[now].l==l&&tr[now].r==r)
return tr[now].sum;
int mid=(tr[now].l+tr[now].r)>>;
if(l>mid) return gets(now<<|,l,r);
else if(r<=mid) return gets(now<<,l,r);
else return gets(now<<,l,mid)+gets(now<<|,mid+,r);
} int main()
{
scanf("%d",&n);
build(,,N);ans=;
for(int i=;i<=n;i++)
{
scanf("%d",&x);
ans+=gets(,x+,N);
insert(,x);
}
printf("%lld\n",ans);
return ;
}

最新文章

  1. jQuery整理
  2. 第21章 java线程(1)-线程初步
  3. JS中的 new 操作符简单理解
  4. [BZOJ3139][HNOI2013] 比赛
  5. MVC之路随记1--Filter的应用
  6. @SuppressWarnings注解
  7. CFileDialog 、CFile 如何进行文件操作 [转]
  8. LAMP+Proftpd+数据迁移
  9. Javascript高级篇-JS闭包
  10. 5_Navigation Bar
  11. 如何隐藏DLL中,导出函数的名称?
  12. 什么是VSync
  13. Android新浪微博client(七)——ListView图片异步加载、高速缓存
  14. PHP里文件的查找方式及写法
  15. Docker 核心技术之Dockerfile
  16. Android ANR Waiting because no window has focus问题分析
  17. 正则匹配-URL-域名
  18. MTP 设备不显示
  19. 4、url控制系统
  20. ceil 和floor

热门文章

  1. Centos6.7 安装Naigos教程
  2. Python 之列表操作
  3. css3的基础知识
  4. 棋盘DP三连——洛谷 P1004 方格取数 &amp;&amp;洛谷 P1006 传纸条 &amp;&amp;Codevs 2853 方格游戏
  5. MySQL的分组和排序
  6. 腾讯云,搭建Docker环境
  7. AtCoder ABC 085C/D
  8. 【 Codeforces Global Round 1 B】Tape
  9. Java基础学习总结(73)——Java最新面试题汇总
  10. Macbook上安装Win7经验总结