Day7 T2 排序
时间:2019-09-13
本文章向大家介绍Day7 T2 排序,主要包括Day7 T2 排序使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目
你收到一项对数组进行排序的任务,数组中是1到N个一个排列。你突然想出以下一种特别的排序方法,分为以下N个阶段:
•阶段1,把数字1通过每次交换相邻两个数移到位置1;
•阶段2,用同样的方法把N移到位置N;
•阶段3,把数字2移到位置2处;
•阶段4,把数字N-1移到位置N-1处;
•依此类推。
换句话说,如果当前阶段为奇数,则把最小的未操作的数移到正确位置上,如果阶段为偶数,则把最大的未操作的数移到正确位置上。
写一个程序,给出初始的排列情况,计算每一阶段交换的次数。
输入
第一行包含一个整数N(1 \(\leqslant\) N \(\leqslant\) 100000),表示数组中元素的个数。
接下来N行每行一个整数描述初始的排列情况。
输出
输出每一阶段的交换次数。
样例
输出 | 输入 |
---|---|
3 2 1 3 |
1 0 0 |
5 5 4 3 2 1 |
4 3 2 1 0 |
7 5 4 3 7 1 2 6 |
4 2 3 0 2 1 0 |
题解
听说这题和用树状数组求逆序对很像,但是……本蒟蒻不会用树状数组求逆序对QAQ我求逆序对都是用的归并排序qwq
记录每个数对应的位置,每个数需要交换的次数就是它前面没有排好序的数的个数,那么我们用1对应没有排好序的数,0对应排好了序的数,用树状数组求和即可。
#include<bits/stdc++.h>
using namespace std;
int n;
int c[100010],loc[100010];
int lowbit(int x){
return x&(-x);
}
void update(int x,int y){
for(;x<=n;x+=lowbit(x)) c[x]+=y;
}
int sum(int x){
int res=0;
for(;x;x-=lowbit(x)) res+=c[x];
return res;
}
int main(){
scanf("%d",&n);
int temp;
for(register int i=1;i<=n;i++){
scanf("%d",&temp);
loc[temp]=i;
update(i,1);
}
for(register int i=1;i<=n;i++){
int t;
if(i&1){
t=(i+1)/2;
printf("%d\n",sum(loc[t]-1));
update(loc[t],-1);
}
else{
t=n-(i/2)+1;
printf("%d\n",sum(n)-sum(loc[t]));
update(loc[t],-1);
}
}
return 0;
}
原文地址:https://www.cnblogs.com/znk161223/p/11517393.html
- 关于dg broker的简单配置(r5笔记第99天)
- 三天速成 TensorFlow课件分享
- 干货 | 机器学习算法线上部署方法
- 用于快速开发 3D 数据处理软件的开源数据处理库 —— Open3D | Github 项目推荐
- 【java网络】IO编程
- 一周 Github Trending 热门项目,最全中华古诗词数据库 | Github 项目推荐
- 【线程池】线程池与工作队列
- 一个快速方便的图形化 Python 调试器 —— birdseye | Github 项目推荐
- 关于分区表的在线重定义(r5笔记第98天)
- 10个实用的但偏执的Java编程技术
- 看似诡异的tablespace online问题(r5笔记第95天)
- python2.7进行爬虫POI代码(划分小网格算法)
- 从 Encoder 到 Decoder 实现 Seq2Seq 模型
- python2.7进行爬虫百度POI代码(划分小网格算法)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 有赞 GO 项目单测、集成、增量覆盖率统计与分析
- RSA--通过模和指数加密模板--无填充
- 有赞发号器多机房方案
- python爬虫以及后端开发--实用加密模板整理
- APP脱壳方法三
- Flink Checkpoint 原理流程以及常见失败原因分析
- Docker原理之 - OverlayFS设计与实现
- 有赞零售跨平台打印库方案
- [Go] Golang练习项目-GO语言实现快速排序-第一个数作为基准更容易理解
- 有赞移动基础设施建设的实践和思考
- 大数据理论篇HDFS的基石——Google File System
- 6. 二十不惑,ObjectMapper使用也不再迷惑
- 接口自动化对比工具实践
- 什么?Java9这些史诗级更新你都不知道?Java9特性一文打尽!
- 利用 Arthas 精准定位 Java 应用 CPU 负载过高问题