求逆序数

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
int num;
int pos;
};
node st[500010];
int reflect[500010];
int a[500010];
int n;
bool cmp(node a,node b)
{
return a.num<b.num;
}
int lowbit(int x)
{
return x&(-x);
}
int sum(int x)
{
int ret=0;
while(x>0)
{
ret+=a[x];
x-=lowbit(x);
}
return ret;
}
void add(int x,int d)
{
while(x<=n)
{
a[x]+=d;
x+=lowbit(x);
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(!n) break;
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
scanf("%d",&st[i].num);
st[i].pos=i;
}
sort(st,st+n,cmp);
for(int i=0;i<n;i++)
{
reflect[st[i].pos]=i+1;
}
long long ans=0;
for(int i=0;i<n;i++)
{
int tem=sum(reflect[i]);
ans+=i-tem;
add(reflect[i],1);
}
cout<<ans<<endl;
}
return 0;
}

最新文章

  1. Web Audio介绍
  2. Winform开发:在ProgressBar显示百分比数字
  3. javascript --- 设计模式之构造函数模式
  4. 类调用类的protected或private的成员函数或成员变量
  5. C++中单例模式
  6. cocos2d-x学习日志(12) --弹出对话框的设计与实现
  7. 搭建Hadoop平台(新手入门)
  8. win8 -telnet安装
  9. C语言使用指针变量指向字符串,对字符串进行处理后再将指针移向开头为什么不能输出?(使用Dev-c++进行编译)
  10. udp服务端收发数据流程
  11. 开发日记:JsonCSharpHelp
  12. WinForm打包或部署
  13. SQLSERVER 数据量太大,重启服务器后,数据库显示正在恢复
  14. lavarel 中间件
  15. Lua 判断表是否为空方法
  16. IDEA配置SVN,Git,GitLab
  17. 力扣(LeetCode)389. 找不同
  18. 在不安装oracle客户端的情况下,使用PLSQL
  19. 线程的属性和 线程特定数据 Thread-specific Data
  20. zabbix自定义key监控nginx和fpm(网站并发数)

热门文章

  1. 大话设计模式C++实现-第17章-适配器模式
  2. [iOS]字符串转字典
  3. JavaScript 没有函数重载&amp;amp;Arguments对象
  4. ZOJ 1696 Viva Confetti 计算几何
  5. 将hexo的评论系统由gitment改为Valine
  6. JQuery中的find、filter和each方法学习
  7. android adb command
  8. C#.Net版本自动更新程序及3种策略实现
  9. MySQL学习(二)——SQL语句创建删除修改以及中文乱码问题
  10. SQL语句调优相关方法