http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1352

题意:就是要将7 1 5 2这样的序列变成1  2  5  7最少需要多少步?给出变的规律,每次把最前面的那个数移动到比它次小的数的后面,要是它后面没有比它次小的数,就移动到最后,问最少需要多少步?

For example, we will use 7 steps to sort the sequence 7 1 5 2:
    7 1 5 2 --> 1 5 7 2 --> 5 7 2 1 --> 7 2 5 1 --> 2 5 7 1 --> 5 7 1 2 --> 7 1 2 5 --> 1 2 5 7

思路:这个题目给出的数据量很大,所以一步步模拟肯定超时。那么就只能是看各种数字移动到它最终位置是否存在一定规律......经过思考,发现好像没有什么规律....于是这道题目我就放弃了.....然后我的一个队友说,一个数移动到它次小的数后面,那么就可以把这两个数合并成一个数,然后再找再合并.....这样时间复杂度会减少很多。的确是这样的,合并完之后,我们只需要用个并查集来统计有多少个数合并在一起了,然后每次移动的时候,把这些数加上即可.......只是,这样还有一个问题,如何找到比它次小的数?如果次小的数已经被合并了呢?......暴力去查找,明显耗时会很大,可能会超时,那么可以把数据进行离散化,由于所以数字都是独一无二的,那么在找次小的数的时候,我们只需要find(x-1)即可........

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
#define inf 100005
typedef long long ss;
ss father[inf],rank[inf];
ss a[inf],b[inf],n;
queue<ss>q;
queue<ss>q1;
ss erfen(ss sum)
{ ss ll=0,rr=n-1; while(ll<=rr) { ss mid=(ll+rr)/2; if(b[mid]>sum) rr=mid-1; else    ll=mid+1; } return rr;
}
ss find(ss x)
{ ss i=x,root; while(x!=father[x]) x=father[x]; root=x; x=i; while(x!=father[x]) { i=father[x]; father[x]=root; rank[root]+=rank[x]; rank[x]=0; x=i; } return root;
} void liantong(ss x,ss y)
{ father[x]=y; rank[y]+=rank[x]; rank[x]=0;
}
int main()
{ ss text; scanf("%lld",&text); while(text--) { scanf("%lld",&n); while(!q.empty()) q.pop(); while(!q1.empty()) q1.pop(); for(ss i=0;i<n;i++) { scanf("%lld",&a[i]); b[i]=a[i]; father[i]=i; rank[i]=1; } sort(b,b+n); //int ll=1,rr=n-1; for(ss i=0;i<n;i++) { a[i]=erfen(a[i]); } for(ss i=0;i<n;i++) { q.push(a[i]); } ss ans=0; while(!q.empty()) { ss x=q.front(); q.pop(); if(!q.empty()) { if(x==0) { ss flg=0; ss tmp=x; while(!q.empty()) { ss y=q.front(); if(tmp<y) tmp=y; else flg=1; q.pop(); q1.push(y); } if(flg==1) { while(!q1.empty()) { ss y=q1.front(); q1.pop(); q.push(y); } q.push(x); ans+=rank[x]; } else break; } else{ ans+=rank[x]; ss y=find(x-1); if(x!=y) { liantong(x,y); } } } } printf("%lld\n",ans); } return 0;
}

中南大学oj:1352: New Sorting Algorithm相关推荐

  1. NUIST OJ 1352 回顾 【差分】

    NUIST OJ 1352 回顾 [差分] NUIST OJ 1352 回顾 差分 题目 原问题 差分是什么 求An数组和Sn数组 快速求区间和 代码呈现 随便说说 后记 题目 题目描述 第三次选择那 ...

  2. 文献翻译:SETNDS: A SET-based Non-dominated Sorting Algorithm for Multi-objective Optimization Problems

    文献原题目,SETNDS: A SET-based Non-dominated Sorting Algorithm for Multi-objective Optimization Problems ...

  3. 9个元素换6次达到排序序列_十大算法排序(Sorting Algorithm) Study notes

    (自己手打的python实现代码以及整理的各路大神总结的知识点) 自用学习笔记,由于基于北美cs学习,文章大量中英混杂(谨慎食用) 十大排序算法: 插入排序 1)Insertion Sort 简单插入 ...

  4. 排序算法 Sorting Algorithm(一)

    练习下算法规范描述问题和伪代码表示 Input: sequence 〈a1, a2, -, an〉of numbers. Output: permutation 〈a'1, a'2, -, a'n〉S ...

  5. Python_Example_ Data Structures and Algorithm Analysis 学习/示例

    Author: 楚格 2018-11-19   19:05:11 IDE: Pycharm2018.02   Python 3.7 KeyWord :  Data Structures and Alg ...

  6. 2021年度训练联盟热身训练赛第五场 H题In-place Sorting+贪心构造

    题意: 给你n个小于101810^{18}1018的大数,问在可以再不改变序列位置,之改变数值中某数位的'9'变为'6'或将'6'变为'9',求的最终序列由小到大,且字典序最小. 题目: 链接:htt ...

  7. NUIST OJ 1350-1352 面朝大海,春暖花开【初识线段树】

    NUIST OJ 1350-1352 面朝大海,春暖花开 NUIST OJ 1350-1352 面朝大海春暖花开 NUIST OJ 1350 面朝大海 春暖花开 基础版 NUIST OJ 1351 面 ...

  8. 排序算法,最全的10大排序算法详解(Sort Algorithm)

    文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...

  9. Ecg信号QRS波峰检测:A Real-Time QRS Detection Algorithm (Pan-Tompkins法)

    Pan-Tompkins法是R峰检测的经典方法,被引量高达6000+次. Pan J, Tompkins W J. A real-time QRS detection algorithm[J]. IE ...

  10. Review of Algorithm (HITSZ) 含22年真题回忆

    Review of Algorithm (HITSZ)含22年真题回忆 1. Time Analysis 1.1 Basic 1.2 Master Method 1.3 Recurrence Prob ...

最新文章

  1. 5、删除用户(DROP/DELETE USER)
  2. 岗位推荐 | 微软AI Research Group招聘自然语言处理AI算法研究实习生
  3. 解决Ubuntu 14下,PhpStorm 9.x 编辑器界面中文乱码的问题
  4. 购物商城框架java_基于jsp的购物商城-JavaEE实现购物商城 - java项目源码
  5. 内存超频时序怎么调_电脑内存条专业科普,内存选购、内存品牌、内存安装、内存时序体质、内存超频频率详细讲解...
  6. 通俗的说这是一个一对多的例子,看看人家是怎么做的!
  7. 21天Jenkins打卡Day12发布到测试服务器
  8. 《程序员面试宝典》中的一些面试题
  9. 有点累了?不如看看兵法三十六计。
  10. android 不限速迅雷,安卓iOS,Windows和Mac四大系统迅雷不限速神器,今天全部解决了...
  11. 官方示例之地球模块五:ThingLayer
  12. PHPStudy使用教程及phpstudy安装教程
  13. 贪心算法--会议安排
  14. canvas练习笔记之手绘熊本熊
  15. 基于MATLAB APP Designer 和 Python 的音视频剪辑App_02
  16. 饶天亮到访深圳时空梭,区块链技术与名人明星产业碰撞出新火花
  17. 密码学的随机性与区块链随机数
  18. Java语言的出现背景、主要特点、发展历程以及Java技术的应用
  19. Vue入门到上手(10)—— VueJs 填坑日记之在项目中使用Amaze UI
  20. ubuntu LibreOffice writer的基本操作

热门文章

  1. 2017-7-8 OpenStack手工+oz自动制作CentOS 7.3镜像
  2. [11]2020-CVPR-State-Relabeling Adversarial Active Learning论文笔记
  3. 绪论、关系数据库知识点总结
  4. 某绒面试的病毒分析(一)
  5. HTML——校友会(bootstrap)
  6. string StartsWith 方法 Https
  7. 设计模式-工厂模式(二)
  8. Debian忘记密码修改
  9. CAM(内容可寻址存储器)的认知
  10. ERP必须基于企业流程管理