我用的线段树写的。

num数组表示已插入的数值的个数。

由于a[i]数值很大,但是n不是很大,所以要离散化处理

9 1 0 5 4

离散化后

4 1 0 3 2

这样保证最大值不会超过n

#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
using namespace std; typedef long long ll;
const int MAXN = 543210;
int a[MAXN], mp[MAXN], num[MAXN<<2]; void push_up(int rt)
{
num[rt] = num[rt<<1] + num[rt<<1|1];
} void update(int p, int l, int r, int rt)
{
if(l == r)
{
num[rt]++;
return;
}
int m = (l + r) >> 1;
if(p <= m) update(p, lson);
else update(p, rson);
push_up(rt);
} int query(int L, int R, int l, int r, int rt)
{
if(L <= l && r <= R) return num[rt];
int m = (l + r) >> 1;
int ret = 0;
if(L <= m) ret += query(L, R, lson);
if(R > m) ret += query(L, R, rson);
return ret;
} bool cmp(int A, int B)
{
return a[A] < a[B];
} int main()
{
// freopen("in.txt", "r" ,stdin);
int n;
while(~scanf("%d", &n) && n)
{
for(int i=0; i<n; i++)
{
scanf("%d", &a[i]);
mp[i] = i;
}
//离散化,排序后处理
sort(mp, mp+n, cmp); //离散化排序
for(int i=0; i<n; i++)
a[mp[i]] = i; //离散化处理
ll ans = 0;
memset(num, 0, sizeof(num));
for(int i=0; i<n; i++)
{
ans += query(a[i], n-1, 0, n-1, 1);
update(a[i], 0, n-1, 1);
}
printf("%I64d\n", ans);
}
return 0;
}

最新文章

  1. crawler4j 学习
  2. error the @annotation pointcut expression is only supported at Java 5 compliance
  3. 天气webservices
  4. Mac系统如何编辑hosts文件
  5. MySQL版本介绍
  6. Oracle中创建MD5方法
  7. 控制Wordpress对搜索引擎的可见性
  8. 停止某个机房所有机器上包的脚本 pack_idc_stop.py
  9. 【Hadoop代码笔记】Hadoop作业提交之Child启动reduce任务
  10. android设置组件所占的比例
  11. BestR #31
  12. JSP/Servlet(一)
  13. linux小白成长之路9————打包部署SpringBoot项目
  14. 棋盘 chess
  15. [译文]Domain Driven Design Reference(七)—— 大型战略设计结构
  16. SkylineGlobe TerraExplorer for Web 7.1.0版本 接口示例
  17. IntelliJ IDEA 导入Spring源码
  18. Docker(一)基本概念
  19. C和C++内存模型
  20. 读DataSnap源代码(四)

热门文章

  1. Deepin/Uos系统更新源失败。提示:E: 仓库 “http://packages.chinauos.cn/uos eagle
  2. 桌面支持qt版本是多少检查
  3. CentOS下cpu分析 top
  4. Linux中级之ansible配置(playbook)
  5. readlink 函数用法 -(转自 JK198310的专栏)
  6. 8.8-9 fsck、dd
  7. (数据科学学习手札123)Python+Dash快速web应用开发——部署发布篇
  8. python操作kafka
  9. Python+Selenium学习笔记13 - 窗口截图及关闭
  10. 使用Jprofiler分析Java项目的内存开销情况并利用强制回收控制内存