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

构造+模拟,CF 873D - Merge Sort

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

873D - Merge Sort


二、解题报告

1、思路分析

考虑初始会调用一次,然后每次分治又会增加两次,所以一定会调用奇数次

k 为偶数直接特判

然后我们模拟归并的过程,由于归并的前提是存在逆序对,那么我们将左边最大和右边最小调换位置然后分治递归即可

2、复杂度

时间复杂度: O(nlogn)空间复杂度:O(n)

3、代码详解

 ​
#include <bits/stdc++.h>

// #define DEBUG

using i64 = long long;
using u32 = unsigned int;
using u64 = unsigned long long;

void solve(){
	int n, k;
	std::cin >> n >> k;

	if (k % 2 == 0) {
		std::cout << -1;
		return;
	}

	std::vector<int> a(n);
	std::iota(a.begin(), a.end(), 1);

	// [l, r)
	auto dfs = [&](auto &&self, int l, int r) -> void {
        if (k == 0 || l + 1 == r) return;
        int m = (l + r) / 2;
        k -= 2;
        std::swap(a[m - 1], a[m]);
        self(self, l, m);
        self(self, m, r);
	};

	-- k;
	dfs(dfs, 0, n);

	if (k)	std::cout << -1;
	else	for (int x : a) std::cout << x << ' ';
}

auto FIO = []{
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	std::cout.tie(nullptr);
	return 0;
}();

int main() {
	#ifdef DEBUG
		freopen("in.txt", 'r', stdin);
		freopen("out.txt", 'w', stdout);
	#endif
	int t = 1;
	// std::cin >> t;
	while(t --)
		solve();
	return 0;
}


http://www.kler.cn/a/289326.html

相关文章:

  • 代码修改材质参数
  • Spring Boot 2.x 和 Druid 多数据源整合 dm
  • 新版 idea 编写 idea 插件时,启动出现 ClassNotFound
  • 【插件】多断言 插件pytest-assume
  • WebGIS三维地图框架--Cesium
  • Android Framework AMS(16)进程管理
  • 水平垂直居中的方式
  • Nginx - Rewirte
  • 【GPT】Coze使用开放平台接口-【5】API 调用
  • 15、Django Admin添加自定义字段功能
  • 宠物勺子秤芯片解决方案CSU8RP1186
  • 机器学习(五) -- 监督学习(8) --神经网络2
  • 苹果系统中如何安装Python和PyCharm
  • 低代码用户中心的构建与应用
  • 计算机毕业设计PySpark深度学习动漫推荐系统 动漫视频推荐系统 机器学习 协同过滤推荐算法 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计
  • Vue3 数据通信
  • 计算机网络 第1章 概述
  • AI预测体彩排3采取888=3策略+和值012路或胆码测试9月3日升级新模型预测第71弹
  • 大数据-114 Flink DataStreamAPI 程序输入源 自定义输入源 Rich并行源 RichParallelSourceFunction
  • Meshy-4:AI驱动3D建模的革命性工具,解锁虚拟创作新高度
  • AIGC与数据分析融合,引领商业智能新变革(TOP企业实践)
  • 摄像头进行视频捕获并定时截取屏幕图像
  • 【前端面试】设计循环双端队列javascript
  • C#通过ACE OLEDB驱动程序访问 Access和 Excel
  • K8s 节点管理:使用 kubeadm 删除和重新添加 Kubernetes 节点
  • 软件架构设计——DCI 范型