CodeTON Round 7 (Div. 1 + Div. 2, Rated, Prizes!), E题 --- 题解

目录

题目大意:

思路解析:

代码:


Problem - E - Codeforces

题目大意:

现在给你一个排列,排列的定义是如果排列长度为n,则他应该出现1-n的每个数字一次,但是顺序是无序的,现在问你通过旋转使得这个排列变为有序的,每个位置需要多少次旋转就可以让他变为有序。旋转操作定义为:让现在排列在不是有序的位置进行左移。例如:3 2 4 1 5,现在有序的位置 2 和 5,所以我们让 1 3 4这上面位置的数字进行旋转,旋转一次后,数列变为 1 2 3 4 5。

思路解析:

我们现在知道了,我们只能进行旋转,我们需要得到它这个位置进行旋转的次数,因为每次旋转一次就会左移一次,其实就是看它对应位置的距离。                                                                               给出一个例子: 

214653
123456

 1 和 1 的位置距离5,

2 和 2 的位置距离1,

3 和 3 的位置距离3,这里 包括了 2 和 2 的距离

4 和 4 的位置距离1,

5 和 5 的位置距离0,

6 和 6 的位置距离2。例如 这里包括了5和5的距离

但是这些距离其实包括了已经不需要移动的距离,或者在移动过程中,有些距离已经不需要移动了,这是需要减去的。所以我们可以通过每个位置上面的ai,来计算它前往的有序位置距离它当前位置的距离。                                                                                                                                      计算公式为 

  1. ai >= i,  x = ai - i
  2. ai < i,    x = ai + n - i

通过上面分析,我们知道这样的距离其实是包括了一些多余的距离(多余的距离通过上面分析我们知道,就是在旋转时,比我们先达到终点的点),那我们可以把这个距离看作一个线段,如果它比我们先达到终点,则这个线段应该完全被我的线段包含。如 6 -> 6 的线段为 4 - 6. 5 -> 5 的线段为 5 - 5. 6 -> 6 的线段完全包含5 -> 5 的线段,所以 6 -> 6 的线段距离为 6 - 4 - 1。完全包含几个线段就减去几。这里线段的查询和更新使用二叉索引数完成。

因为ai < i情况下的线段为 i --- ai + n 。因为有些线段跨越了n,这将ai >= i情况下的线段分为两个:i --- ai,i+n  --- ai+n。

代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;
import java.util.Scanner;/*** @ProjectName: study3* @FileName: Ex27* @author:HWJ* @Data: 2023/11/26 0:48*/
public class Ex27 {static int[] f;static int n;public static void main(String[] args) throws IOException {StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));in.nextToken();int t = (int)in.nval;for (int o = 0; o < t; o++) {in.nextToken();n =(int)in.nval;int[] res = new int[n + 1];int[] arr = new int[n + 1];f = new int[2 * n + 5];int[][] rgs = new int[2 * n + 5][2];int p = 0;for (int i = 1; i <= n; i++) {in.nextToken();arr[i] = (int)in.nval;if (i <= arr[i]){rgs[p][0] = i;rgs[p++][1] = arr[i];rgs[p][0] = i + n;rgs[p++][1] = arr[i] + n;}else {rgs[p][0] = i;rgs[p++][1] = arr[i] + n;}}Arrays.sort(rgs, 0, p, ((o1, o2) -> {return o2[0] - o1[0];}));for (int i = 0; i < p; i++) {if (rgs[i][0] <= n){res[arr[rgs[i][0]]] = rgs[i][1] - rgs[i][0] - (qre(rgs[i][1]) - qre(rgs[i][0] - 1));}incre(rgs[i][1]);}for (int i = 1; i <= n; i++) {System.out.print(res[i] + " ");}System.out.println();}}public static int qre(int x){int res = 0;for (; x > 0; x -= x & -x) {res += f[x];}return res;}public static void incre(int x){for (; x <= 2 * n; x += x & -x) {f[x] += 1;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/172264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MOJO】Modular语言安装和测试

目录 一、Mojo介绍 Linux​ Mac 二、安装Mojo SDK 三、mojo代码测试 3.1、在 REPL 中运行代码​ 3.2、构建并运行 Mojo 源文件​ 运行mojo文件​ 构建可执行二进制文件​ 四、VSCode安装 一、Mojo介绍 在学习Rust语言的过程中无意发现了Modular语言&#xff0c;语言…

Docker部署Nacos

此篇文章使用的nacos为2.2.1版本 拉取Nacos镜像 docker pull nacos/nacos-server:v2.2.1先将容器启动起来 docker run -d \ --name nacos \ -p 8848:8848 \ -p 9848:9848 \ -p 9849:9849 \ --privilegedtrue \ -e JVM_XMS256m \ -e JVM_XMX256m \ -e MODEstandalone \ -e NA…

nginx基础篇学习

一、nginx编译安装 1、前往nginx官网获取安装包 下载安装包 2、解压 3、安装 进入安装包 安装准备&#xff1a;nginx的rewrite module重写模块依赖于pcre、pcre-devel、zlib和zlib-devel库&#xff0c;要先安装这些库 安装&#xff1a; 编译&#xff1a; 启动&#xff…

web前端之vue和echarts的堆叠柱状图顶部显示总数、鼠标悬浮工具提示、设置图例的显示与隐藏、label、legend、tooltip

MENU 效果图htmlJavaScripstyle解析 效果图 html <template><div><div><div id"idStackedColumnChart" style"width: 100%; height: 680px"></div></div></div> </template>JavaScrip export default {…

python-opencv轮廓检测(外轮廓检测和全部轮廓检测,计算轮廓面积和周长)

python-opencv轮廓检测&#xff08;外轮廓检测和全部轮廓检测&#xff0c;计算轮廓面积和周长&#xff09; 通过cv2.findContours&#xff0c;我们可以进行轮廓检测&#xff0c;当然也有很多检测模式&#xff0c;我们可以通过选择检测模式&#xff0c;进行外轮廓检测&#xff…

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示(二)

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示(二) mp4媒体流数据 #include <ros/ros.h> #include <signal.h> #include <sensor_msgs/Image.h> #include <message_filters/subscriber.h> #include <message_filters/synchroniz…

从零开始学习管道:管道程序的优化和文件描述符继承问题

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容管道后续的完善&#xff0c;以及解决管道继承多个文件描…

精进Beautiful Soup 小技巧(三)---综合提供效率(缓存/error/多线程/异步)

前言: 提高抓取和解析效率的根本还是在于发送请求;如何从这个方面进行效率提升呢? 深入使用requests.Session() 深入使用requests.Session() 1.持久连接&#xff1a; 当使用 requests.Session() 时&#xff0c;连接会话中所有的请求将优先使用一个TCP连接&#xff0c;即“…

点击url如何唤起nativescript应用程序?

1、低于ios 9.0的版本 可以使用 nativescript-urlhandler&#xff0c;通过在app.component.ts中添加handleOpenURL来实现。 2、高于ios 9.0的版本 可以使用 nativescript-community/universal-links来实现 https://github.com/nativescript-community/universal-links 安装&a…

【Amazon】基于Amazon提供的托管式EKS通过eksctl命令部署Kubernetes集群

文章目录 一、使用CloudFormation创建堡垒机二、安装AWS CLI命令行工具三、安装eksctl命令行工具四、创建集群角色4.1 集群服务角色创建4.2 集群节点组角色创建 五、创建 EKS集群六、登录EKS控制台七、参考链接 一、使用CloudFormation创建堡垒机 导航至CloudFormation&#xf…

Kafka(二)在WSL搭建Schema Registry

目录 1 Avro与Schema Registry2 搭建Schema Registry2.1 下载Confluent并解压2.2 设置环境变量2.3 修改配置2.4 启动服务 3 API列表 1 Avro与Schema Registry Apache Avro 是一种高效的数据序列化系统&#xff0c;用于在不同的应用程序和平台之间传输和存储数据。它提供了一种…

AI智能客服搭建教程附带免费源码

*名称* *版本要求* 服务器 CPU 2核心 ↑运存 4G ↑宽带 5M ↑ 服务器操作系统 Linux Centos7 运行环境 Nginx 1.18 PHP 7.3 MYSQL 5.6 服务器配置及环境要求 PHP设置 一、安装PHP扩展插件:fileinfo、redis、 sg11 二、删除PHP对应版本中的 pcntl_signal 、pcntl_signal_dis…

python类和对象

1.使用对象组织数据 class Student:nameNone #记录名字 stu1Student() #创建对象 stu1.name"abc" #为对象属性赋值2.类的定义和使用 2.1成员方法的定义语法 传参的时候self是透明的&#xff0c;不用管 class Stu:nameNonedef sayHi(self):print(f"你好&#x…

【数据中台】开源项目(1)-LarkMidTable

LarkMidTable 是一站式开源的数据中台&#xff0c;实现中台的 基础建设&#xff0c;数据治理&#xff0c;数据开发&#xff0c;监控告警&#xff0c;数据服务&#xff0c;数据的可视化&#xff0c;实现高效赋能数据前台并提供数据服务的产品。 系统演示地址 &#xff1a; www.l…

Windows 7隐藏用户测试

请注意Window 7是在虚拟机上安装的&#xff0c;ip是192.168.0.108。 下边都是在虚拟机Window 7上操作&#xff0c;直到最后远程连接才在自己本机Windows 11上操作。 需要同时按下Windowsr,然后输入cmd&#xff0c;再点击确定。 在命令上里边输入net user可以显示一下用户。 …

C语言学习笔记之函数篇

与数学意义上的函数不同&#xff0c;C语言中的函数又称为过程&#xff0c;接口&#xff0c;具有极其重要的作用。教科书上将其定义为&#xff1a;程序中的子程序。 在计算机科学中&#xff0c;子程序&#xff08;英语&#xff1a;Subroutine, procedure, function, routine, me…

React 入门使用 (官方文档向 Part2)

文章目录 用 State 响应输入声明式地考虑 UI步骤 1&#xff1a;定位组件中不同的视图状态步骤 2&#xff1a;确定是什么触发了这些状态的改变步骤 3&#xff1a;通过 useState 表示内存中的 state步骤 4&#xff1a;删除任何不必要的 state 变量步骤 5&#xff1a;连接事件处理…

TypeScript 中的type与interface

TypeScript 中的type与interface 对于 TypeScript&#xff0c;有两种定义类型的方法&#xff1a;type与interface。 人们常常想知道该使用哪一种&#xff0c;而答案并不是一刀切的。这确实取决于具体情况。有时&#xff0c;其中一种比另一种更好&#xff0c;但在许多情况下&a…

059-第三代软件开发-巧用工控板LED指示灯引脚

第三代软件开发-巧用工控板LED指示灯引脚 文章目录 第三代软件开发-巧用工控板LED指示灯引脚项目介绍巧用工控板LED指示灯引脚第一种方式第二种方式 总结 关键字&#xff1a; Qt、 Qml、 Power、 继电器、 IO 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项…

video标签在h5中被劫持问题

将video的视频链接转为blob export const encryptionVideo (options: URL) > {return new Promise((resolve, reject) > {window.URL window.URL || window.webkitURL;var xhr new XMLHttpRequest();xhr.open(GET, options.url, true);xhr.responseType blob;xhr.onl…