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

蓝桥集训之火柴排队

蓝桥集训之火柴排队

  • 核心思想:离散化+归并排序

    • 由于数据范围较小10w 需要控制时间复杂度到nlogn 同时排两个数组会超时
    • 所以将a数组离散化成顺序数组 b数组离散化后再归并排序求逆序对数量
  •   #include<iostream>#include <algorithm>#include <cstring>using namespace std;const int N = 100010 , MOD = 99999997;int n;int a[N],b[N],p[N],c[N];int find(int x)  //离散化二分{int l=1,r=n;while(l<r){int mid = l+r >>1;if(p[mid] >=x ) r= mid;else l = mid + 1;}return l;}void work(int a[])  //离散化{for(int i=1;i<=n;i++) p[i] = a[i];  //将原本的a数组存下 仅用于排序sort(p+1,p+n+1);for(int i=1;i<=n;i++) a[i] = find(a[i]);  //更新a数组元素为应该在的下标(根据元素大小)}int merge_sort(int l,int r)  //求逆序对数量{if(l==r) return 0;int mid = l+r >>1;int res = (merge_sort(l,mid) + merge_sort(mid+1,r));int i = l,j = mid +1,k=0;while(i<=mid && j<=r){if(b[i] <= b[j]) p[k++] = b[i++];else p[k++] = b[j++] , res = (res + mid - i + 1) % MOD;}while(i<=mid) p[k++] = b[i++];while(j<=r) p[k++] = b[j++];for(int i=l,j=0;i<=r;i++,j++) b[i] = p[j];return res;}int main(){cin>>n;for (int i = 1; i <= n; i ++ ) scanf("%d", &a[i]);for (int i = 1; i <= n; i ++ ) scanf("%d", &b[i]);work(a),work(b);for(int i=1;i<=n;i++) c[a[i]] = i;  //c数组用来保存 对应关系for(int i=1;i<=n;i++) b[i] = c[b[i]];  //b数组按照 对应关系 更新cout<<merge_sort(1,n);  //b数组归并return 0;}

相关文章:

  • 【粉丝福利】探秘内部审计数字化之道:精准解析转型方法与成功路径
  • c++ 11 新特性 不同数据类型之间转换函数之const_cast
  • iOS——【自动引用计数】ARC规则及实现
  • HuggingFace模型下载
  • 【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
  • 21-Java观察者模式 ( Observer Pattern )
  • 根据xlsx文件第一列的网址爬虫
  • 【自然语言处理六-最重要的模型-transformer-上】
  • 如何在Windows上使用Docker,搭建一款实用的个人IT工具箱It- Tools
  • 【Element】实现基于 Element UI el-tabs 的左右滑动动画
  • 990-22产品经理:The benefits of business analytics 业务分析的优势
  • 【三维重建】相移法+格雷码
  • 代码随想录算法训练营第三十九天|LeetCode62 不同路径、LeetCode63 不同路径II
  • Android如何实现复制到剪贴板
  • Time-LLM:使用LLM 以进行时间序列预测
  • 03Go 类型总结
  • JAVA SE 6 GC调优笔记
  • Java 网络编程(2):UDP 的使用
  • JAVA 学习IO流
  • JavaScript实现分页效果
  • log4j2输出到kafka
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Netty 4.1 源代码学习:线程模型
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • spring-boot List转Page
  • SpringCloud集成分布式事务LCN (一)
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 码农张的Bug人生 - 初来乍到
  • 前端临床手札——文件上传
  • 微信开源mars源码分析1—上层samples分析
  • 一个JAVA程序员成长之路分享
  • 原生Ajax
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $.ajax,axios,fetch三种ajax请求的区别
  • $.proxy和$.extend
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (1)常见O(n^2)排序算法解析
  • (7)STL算法之交换赋值
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (9)STL算法之逆转旋转
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (转)【Hibernate总结系列】使用举例
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)德国人的记事本
  • ***原理与防范
  • .Net Remoting(分离服务程序实现) - Part.3
  • .Net6使用WebSocket与前端进行通信
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @SuppressWarnings注解