当前位置: 首页 > news >正文

Codeforces Round 909 (Div. 3) E. Queue Sort(模拟 + 贪心之找到了一个边界点)

弗拉德找到了一个由 n 个整数组成的数组 a ,并决定按不递减的顺序排序。

为此,弗拉德可以多次执行下面的操作:

提取数组的第一个元素并将其插入末尾;
将个元素与前一个元素对调,直到它变成第一个元素或严格大于前一个元素。
请注意,这两个操作都是操作的一部分,对于一个操作,必须同时应用这两个操作。

例如,如果对数组 [ 4,3,1,2,6,4 ]进行操作,它将发生如下变化:

[ 4,3,1,2,6,4 ];
[ 3,1,2,6,4,4 ];
[ 3,1,2,6,4,4 ];
[ 3,1,2,4,6,4 ].
弗拉德没有时间进行所有的操作,所以他要求你确定对数组进行排序所需的最少操作数,或者报告说这是不可能的。

输入
输入的第一行包含一个整数 t ( 1 ≤ t ≤ 1 0 4 ) t ( 1≤t≤10^4 ) t(1t104) - 测试用例的数量。测试用例说明如下。

每个测试用例的第一行包含一个整数 n ( 1 ≤ n ≤ 2 ⋅ 1 0 5 ) n ( 1≤n≤2⋅10^5 ) n(1n2105) - 数组的长度。

每个测试用例的第二行包含 n n n 个整数 a 1 , a 2 , a 3 , … , a n ( 1 ≤ a i ≤ 1 0 9 ) a_1,a_2,a_3,…,a_n ( 1≤a_i≤10^9 ) a1,a2,a3,,an(1ai109) - 数组的元素。

保证所有测试用例中 n n n 的总和不超过 2 ⋅ 1 0 5 2⋅10^5 2105

输出
对于每个测试用例,输出一个整数 - 对数组进行排序所需的最少操作数。如果无法排序,则输出 −1 作为答案。


首先我们可以找到这一序列的最小值,那么可以得知,最小值前面的数一定都要被移动,因为要保持数列是不递减顺序。

那么如果前面的数都移动结束之后,我们就不能再移动了,因为最小值一定不会严格小于任何数,所以就会陷入死循环,所以可以知道如果最小值后面的序列原本如果是递减序的话,那么就没有可能将其正常排序了(因为最小值前面的数移动到后面去不会影响后面原本的顺序)。


CODE:

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
#define endl '\n'int a[N];void solve(){int n;cin >> n;int mm = 1;for(int i = 1;i <= n;i++){cin >> a[i];if(a[i] < a[mm])mm = i;}for(int i = mm;i+1 <= n;i++){if(a[i] > a[i+1]){cout << -1 << endl;return;}}cout << mm-1 << endl;
}int main(){int T;cin >> T;while(T--){solve();}return 0;
}

MARKDOWN颜色了哈哈哈

http://www.lryc.cn/news/357064.html

相关文章:

  • 设计模式基础——设计原则介绍
  • 【校园网网络维修】当前用户使用的IP与设备重定向地址中IP不一致,请重新认证
  • 如何找到docker的run(启动命令)
  • Spring如何管理Bean的生命周期呢?
  • Java网络编程:UDP通信篇
  • HTML+CSS+JS简易计算器
  • STM32使用ST-LINK下载程序中需要注意的几点
  • 我和jetson-Nano的故事(12)——安装pytorch 以及 torchvision
  • 「异步魔法:Python数据库交互的革命」(一)
  • 探秘GPT-4o:从版本对比到技术能力的全面评价
  • 四川汇烁面试总结
  • 【小程序 按钮 表单 】
  • 高铁Wifi是如何接入的?
  • gitlab之docker-compose汉化离线安装
  • 【算法】dd爱转转
  • Python3 笔记:IDLE的几个基本设置
  • Mysql:存储过程练习
  • 详解Java ThreadLocal
  • Unable to parse response body for Response{requestLine=PUT
  • GitHub的原理及应用详解(六)
  • 基于PHP+MySQL组合开发的微信小程序分销商城源码系统 分销商城+积分商城+多商户 功能强大 带完整的安装代码包以及搭建教程
  • kafka-消费者组偏移量重置
  • 一书读懂Python全栈安全,剑指网络空间安全
  • 原生js实现拖拽改变元素顺序
  • 以果决其行,只为文化的传承
  • Flutter 中的 SizedOverflowBox 小部件:全面指南
  • 图像视频智能抹除修复解决方案,适应性强,应用广泛
  • 20240521(代码整洁和测试入门学习)
  • git中忽略文件的配置
  • 如何进行前端职业规划