题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1394

线段树功能:update:单点增减 query:区间求和

分析:如果是0到n-1的排列,那么如果把第一个数放到最后,对于这个数列,逆序数是减少a[i],而增加n-1-a[i]的,所以每次变化为res+=n-a[i]-1-a[i].

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define maxn 5555
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
int sum[maxn<<];
int a[maxn];
void PushUp(int rt)
{
sum[rt]=sum[rt<<]+sum[rt<<|];
}
void build(int l,int r,int rt)
{
sum[rt]=;
if(l==r)
return;
int m=(r+l)>>;
build(lson);
build(rson);
}
void update(int pos,int l,int r,int rt)
{
if(r==l)
{
sum[rt]++;
return;
}
int m=(r+l)>>;
if(pos<=m)update(pos,lson);
else update(pos,rson);
PushUp(rt);
}
int Query(int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R)
{
return sum[rt];
}
int m=(r+l)>>;
int res=;
if(L<=m)res+=Query(L,R,lson);
if(m<R)res+=Query(L,R,rson);
return res;
}
int main()
{
int n;
while(scanf("%d",&n)>)
{
build(,n-,);
int sum=;
for(int i=;i<n;i++)
{
scanf("%d",&a[i]);
sum+=Query(a[i],n-,,n-,);
update(a[i],,n-,);
}
int ans=sum;
for(int i=;i<n;i++)
{
sum+=n-a[i]-a[i]-;
ans=min(ans,sum);
}
printf("%d\n",ans);
}
return ;
}

树状数组求逆序对更简单。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define maxn 5555
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
int a[maxn],c[maxn];
int n;
int lowbit(int x)
{
return x&(-x);
}
int sum(int i)
{
int res=;
while(i)
{
res+=c[i];
i-=lowbit(i);
}
return res;
}
void update(int i,int x)
{
while(i<=n)
{
c[i]+=x;
i+=lowbit(i);
}
}
int main()
{
while(scanf("%d",&n)>)
{
int res=;
memset(c,,sizeof(c));
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]++;
res+=i--sum(a[i]);//求1~a[i]区间的出现的数,再总(i-1)-sum(a[i])即可
update(a[i],);//单点更新
}
int ans=res;
for(int i=;i<=n;i++)
{
res+=n-a[i]-(a[i]-);
ans=min(ans,res);
}
printf("%d\n",ans);
}
}

最新文章

  1. HA-0302 退役
  2. 16 IO操作文件读写
  3. 1.3 迭代器 - iterator
  4. Kinect for Windows SDK开发初体验(一)环境配置
  5. 详细解析Java中抽象类和接口的区别
  6. POJ 2486 Apple Tree(树形DP)
  7. StartSSL免费证书申请笔记
  8. Libvirt 虚拟化库剖析
  9. JDBC(用Eclipse操作数据库Oracle)的基础操作集合
  10. poj 3323 Matrix Power Series (矩阵乘法 非递归形式)
  11. .NET框架及C#语言基础
  12. 控制结构(5) 必经之地(using)
  13. Devstack: A copy of worked local.conf I&#39;m sharing with you.
  14. (转)InFluxDB数据库使用手册
  15. lombok插件:Data自动get/set方法, Slf4j实现Logger的调用
  16. laravel 连表查询数据库
  17. python globals和locals
  18. ThinkPHP 5.x远程命令执行漏洞分析与复现
  19. PL/SQL编程基础——PL/SQL简介
  20. RockBrain USB Server- 云计算虚拟化USB设备集中管理、远程共享解决方案(涉及银企直联)

热门文章

  1. css3 动画运动路径
  2. [置顶] 用mootools实现checkbox全选功能
  3. VC++实现位图显示透明效果--实现原理
  4. 深入探讨MFC消息循环和消息泵
  5. CAS (1) —— Mac下配置CAS到Tomcat(服务端)(转)
  6. 修改Hosts文件
  7. Hibernate @Embeddable注解
  8. Swift - 控制流/控制结构说明(if,switch,for,while)
  9. ruby语言仅仅是昙花一现
  10. 条款38 通过复合塑膜出has-a或&amp;quot;依据某物实现&amp;quot;