题目描述

给定一个数列{an},这个数列满足ai≠aj(i≠j),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换?

输入输出格式

输入格式:

第一行,正整数n (n<=100,000)。

以下若干行,一共n个数,用空格分隔开,表示数列{an},任意-2^31<ai<2^31-1。

输出格式:

只有一行,包含一个数,表示最少的交换次数。

输入输出样例

输入样例#1: 复制

8
8 23 4 16 77 -5 53 100
输出样例#1: 复制

5

思路:贪心。

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
map<int,int>id;
int n,ans;
int num[],pos[];
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&num[i]),id[num[i]]=i,pos[i]=num[i];
sort(pos+,pos++n);
for(int i=;i<=n;i++)
if(num[i]!=pos[i]){
num[id[pos[i]]]=num[i];
id[num[i]]=id[pos[i]];
num[i]=pos[i];
ans++;
}
cout<<ans;
}

最新文章

  1. DevOps
  2. webp性能测评
  3. hdu 5442 (ACM-ICPC2015长春网络赛F题)
  4. dom 回到顶部(兼容IE FF Chrome)
  5. Shell学习笔记 - 环境变量配置文件
  6. fil_space_create
  7. DOS的BAT技巧两则
  8. ActionResult解析
  9. 浙大PAT 7-06 题解
  10. Android二维码开源项目zxing用例简化和生成二维码、条形码
  11. C# 创建、部署和调用WebService的简单示例
  12. jmeter(二十五)linux环境运行jmeter并生成报告
  13. mysql 开发进阶篇系列 15 锁问题 (总结)
  14. vue-08-axios-get-post-跨域
  15. log4j日志整合输出(slf4j+commonslog+log4j+jdklogger)
  16. 雷林鹏分享:Ruby 多线程
  17. Linux运维常用的几个命令介绍【转】
  18. 华为OJ训练之 简易的银行排号叫号系统
  19. 【随笔】Linux主机简单判断CC攻击的命令
  20. springmvc mybatis 整合

热门文章

  1. 37.微信跳一跳辅助开发(C语言+EasyX)
  2. Weka中数据挖掘与机器学习系列之Weka3.7和3.9不同版本共存(七)
  3. win7系统 连接打印机 提示 “正在检查 windows update 需要一段时间”
  4. 在使用Easy Sysprep 封装系统时要注意的地方
  5. 应对加密js的三种方法
  6. JAVA数组的基本方法
  7. jq 克隆 移除table
  8. Linux系统消息队列框架Kafka单机安装配置
  9. [ES2017] Iterate over properties of an object with ES2017 Object.entries()
  10. java.util.ConcurrentModificationException 异常解决的方法及原理