【NOI导刊】【归并排序求逆序对】最接近神的人
来源:互联网 发布:南开大学网络教育学位 编辑:程序博客网 时间:2024/06/16 00:17
题目描述
破解了符文之语,小FF开启了通往地下的道路。当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案。而石门上方用古代文写着“神的殿堂”。小FF猜想里面应该就有王室的遗产了。但现在的问题是如何打开这扇门……
仔细研究后,他发现门上的图案大概是说:古代人认为只有智者才是最容易接近神明的。而最聪明的人往往通过一种仪式选拔出来。仪式大概是指,即将隐退的智者为他的候选人写下一串无序的数字,并让他们进行一种操作,即交换序列中相邻的两个元素。而用最少的交换次数使原序列变成不下降序列的人即是下一任智者。
小FF发现门上同样有着n个数字。于是他认为打开这扇门的秘诀就是找到让这个序列变成不下降序列所需要的最小次数。但小FF不会……只好又找到了你,并答应事成之后与你三七分……
输入输出格式
输入格式:
第一行为一个整数n,表示序列长度
第二行为n个整数,表示序列中每个元素。
输出格式:
一个整数ans,即最少操作次数。
代码(归并排序)
#include <cstdio>#include <cstring>#include <algorithm>#define maxn 500000+20using namespace std;typedef long long ll;ll a[maxn],B[maxn];ll n,cnt=0;void Merge(ll A[],int l,int mid,int r){ int *B=new int[r-l+1]; int i=l,j=mid+1,k=0; while(i<=mid&&j<=r){ if(A[i]<=A[j]) B[k++]=A[i++]; else { B[k++]=A[j++]; cnt+=mid-i+1; } } while(i<=mid) B[k++]=A[i++]; while(j<=r) B[k++]=A[j++]; for(k=0;k<r-l+1;k++) A[l+k]=B[k]; delete []B;}void Mergesort(long long A[],int l,int r){ if(l<r){ int mid=(l+r)>>1; Mergesort(A,l,mid); Mergesort(A,mid+1,r); Merge(A,l,mid,r); }}int main(){ scanf("%lld",&n); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); Mergesort(a,1,n); printf("%lld",cnt); return 0;}
1 0
- 【NOI导刊】【归并排序求逆序对】最接近神的人
- 归并排序求逆序对的个数
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对~~~
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- AOJ.592 神奇的叶子
- Linux开发工具之工程管理器make
- B-树的操作总结
- iOS10 权限问题
- UVA 12563 Jin Ge Jin Qu hao 在有约束条件下的DP,结构体作为基本单位
- 【NOI导刊】【归并排序求逆序对】最接近神的人
- Codeforces Round #379 (Div. 2) C. Anton and Making Potions//734C
- 捋一捋 Activity 的启动流程 以及 界面的初始化过程
- Ubuntu 16.04 安装 JDK 和 Open Jdk
- MYSQL常用命令
- makefile语法
- retrofit基础篇之二
- nginx中配置ssl双向认证详解
- iOS开发之直播App流程介绍,直播资料收集汇总,视频推流,视频拉流,SMTP、RTMP、HLS、 PLPlayerKit