上交oj1219 重要的逆序数对
2024-09-05 10:59:38
题意:
https://acm.sjtu.edu.cn/OnlineJudge/problem/1219
思路:
在经典的归并排序求逆序数对算法基础上稍作修改。
实现:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = ;
int n, a[MAXN], tmp[MAXN];
long long cnt = ; void mergeSort(int * a, int left, int right, int * tmp)
{
if (left >= right)
return;
int mid = (left + right) / ;
mergeSort(a, left, mid, tmp);
mergeSort(a, mid + , right, tmp);
int x = left;
int y = mid + ;
int start = left;
while (x <= mid && y <= right)
{
if (a[x] < a[y])
{
tmp[start++] = a[x++];
}
else
{
int pos = upper_bound(a + x, a + mid + , * a[y]) - a;
cnt += mid - pos + ;
tmp[start++] = a[y++];
}
}
while(x <= mid)
{
tmp[start++] = a[x++];
}
while(y <= right)
{
tmp[start++] = a[y++];
}
for (int i = left; i <= right; i++)
{
a[i] = tmp[i];
}
}
int main()
{
scanf("%d", &n);
for (int i = ; i < n; i++)
{
scanf("%d", &a[i]);
}
mergeSort(a, , n - , tmp);
cout << cnt << endl;
return ;
}
最新文章
- HTTP API接口安全设计
- [moka同学摘录]SQL内联、外联的简单理解
- Spring + Jedis集成Redis(单例redis数据库)
- CSS中浏览器开发商特定的CSS属性
- 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值
- Android开发(三十一)——重复引用包错误Conversion to Dalvik format failed
- DELPHI2007 安装ACTIVEX插件的方法
- js实现页面跳转
- Golang之ring.Ring的Link操作
- 对exp full 和 imp full的认识
- document.write 向文档中写内容,包括文本、脚本、元素之类的,但是它在什么时候执行不会覆盖当前页面内容尼?
- Redis短结构与分片
- MySql截取DateTime字段的日期值
- 第九十二节,html5+css3移动手机端流体布局,开篇知识
- MapReduce执行过程
- kubernetes进阶(04)kubernetes的service
- Numpy and Matplotlib
- mysql DISTINCT的用法
- elasticsearch 镜像使用
- 批量输出dwg文件中的文本
热门文章
- Linux 内核源码中likely()和unlikely()【转】
- Linux时间子系统之二:表示时间的单位和结构【转】
- 【转载】浅谈Excel开发:一 Excel 开发概述
- hdu-5718 Oracle(水题)
- Ubuntu上命令行下卸载软件
- codeforces round 420 div2 补题 CF 821 A-E
- Centos_svn安装操作使用步骤
- 线程间操作无效: 从不是创建控件“xxxxxxxx”的线程访问它。
- CF 8D two friends
- Hadoop 三大调度器源码分析及编写自己的调度器