[HEOI2016/TJOI2016] 排序 题解

news/2026/1/16 18:29:57/文章来源:https://www.cnblogs.com/Atserckcn/p/19423684

[HEOI2016/TJOI2016] 排序 题解

很久没写过题解了,但这题思路十分新奇,震惊到我,并且让我学到了许多东西,故写篇题解纪念下。

洛谷题目传送门

题意

给定一个长度为 \(n\le 10^5\) 的序列。

\(m\le 10^5\) 次操作,每次给定一个区间,将区间内的数字排序,有升序降序两种。

问最后下标为 \(q\) 的数字的值。

思路

非常有意思,非常新奇。

01序列的排序

众所周知,对于一个长度为 \(n\) 的序列,排序的时间复杂度是 \(O(n\log n)\) 的。

但是对于一个 \(01\) 序列,甚至连 \(O(n)\) 都不需要,仅需个 \(O(\log n)\)

方法:

首先排序后的序列是有序的,必然是一段 \(0/1\) 连着第二段 \(0/1\)

那么就可以用线段树。

\(sum1\) 表示区间 \([l,r]\) 内的 \(1\) 的个数。

那么从大到小排序就是覆盖 \([l,l+sum1-1]\)\(1\)\([l+sum1,r]\)\(0\)

同理,从小到大就是覆盖 \([r-sum1+1,r]\)\(1\)\([l,r-sum1]\)\(0\)

然后我们就做到了针对 \(01\) 序列的 \(O(\log n)\) 排序。

题目转化

此时我们就尽量把原序列转化为 \(01\) 序列。

分析复杂度:

\(O(m\log n)\) 的操作是免不了的,剩下的最多再加上一只 \(\log\)

考虑二分答案。

将序列与我们二分出的 mid 进行比较,小于则变成 \(0\),否则是 \(1\)

那么我们 \(O(m\log n)\) 操作后,如果 \(q\) 位上是 \(1\),则代表 mid 小等于答案,否则大于。

二分判断的说明

其实如果我们在 \(m\) 次操作后再进行一次排序,可以发现答案的下标一定是在 \(0\) 段和 \(1\) 段的交汇点。

然而因为我们取 mid 时是按照大等于,所以答案的下标上的值一定是 \(1\)

然后我们就可以二分 check,总时间复杂度是 \(O(m\log^2n)\)

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ljl;
#define FUP(i,x,y) for(auto i=(x);i<=(y);++i)
#define FDW(i,x,y) for(auto i=(x);i>=(y);--i)
inline void Rd(auto &num);
const int N=1e5+5;
int n,m,a[N],q,t[N];
struct OPT{int op,l,r;
}opt[N];
namespace SMT{#define lc (p<<1)#define rc (p<<1|1)struct NODE{int l,r,sum,lz;}node[N*4];void pushup(int p){node[p].sum=node[lc].sum+node[rc].sum;return;}void bld(int l,int r,int p){node[p].l=l;node[p].r=r;node[p].lz=-1;if(l==r){node[p].sum=t[l];return;}int mid=(l+r)/2;bld(l,mid,lc);bld(mid+1,r,rc);pushup(p);return;}void pushdown(int p){if(node[p].lz==-1||node[p].l==node[p].r)return;node[lc].lz=node[p].lz;node[lc].sum=(node[lc].r-node[lc].l+1)*node[p].lz;node[rc].lz=node[p].lz;node[rc].sum=(node[rc].r-node[rc].l+1)*node[p].lz;node[p].lz=-1;return;}void addlr(int l,int r,int val,int p){if(l>r)return;pushdown(p);if(l<=node[p].l&&node[p].r<=r){node[p].lz=val;node[p].sum=(node[p].r-node[p].l+1)*val;return;}int mid=(node[p].l+node[p].r)/2;if(l<=mid)addlr(l,r,val,lc);if(mid<r)addlr(l,r,val,rc);pushup(p);return;}int query(int l,int r,int p){if(l>r)return 0;pushdown(p);if(l<=node[p].l&&node[p].r<=r)return node[p].sum;int mid=(node[p].l+node[p].r)/2,ans=0;if(l<=mid)ans+=query(l,r,lc);if(mid<r)ans+=query(l,r,rc);return ans;}
}
using namespace SMT;
bool check(int x)
{FUP(i,1,n)t[i]=(a[i]<x?0:1);bld(1,n,1);FUP(i,1,m){int l=opt[i].l,r=opt[i].r,op=opt[i].op;int sum1=query(l,r,1);if(op)//>{addlr(l,l+sum1-1,1,1);addlr(l+sum1,r,0,1);}else//<{addlr(r-sum1+1,r,1,1);addlr(l,r-sum1,0,1);}}return query(q,q,1);
}
int main(){Rd(n);Rd(m);FUP(i,1,n)Rd(a[i]);FUP(i,1,m){Rd(opt[i].op);Rd(opt[i].l);Rd(opt[i].r);}Rd(q);int l=1,r=n,mid,ans=0;/*遇到可能check(mid) ? l=mid的情况就用这种写法吧qwq */while(l<=r){mid=(l+r)/2;if(check(mid))ans=mid,l=mid+1;else r=mid-1;}printf("%d\n",ans);return 0;
}
inline void Rd(auto &num)
{num=0;char ch=getchar();bool f=0;while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();}while(ch>='0'&&ch<='9'){num=(num<<1)+(num<<3)+(ch-'0');ch=getchar();}if(f)num=-num;return;
}

总结

这题真的让我学到了好多,所以特此记录思想。

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

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

相关文章

B4450 [GESP202512 三级] 小杨的智慧购物

题目来源 B4450 [GESP202512 三级] 小杨的智慧购物 - 洛谷 题目描述 小杨的班级要举办一个环保手工作品展览&#xff0c;老师请小杨去文具店购买 M 种不同的文具&#xff08;例如&#xff1a;铅笔、橡皮、尺子等&#xff09;。 商店里共有 N 件文具&#xff0c;每件文具都有…

STLink驱动下载入门必看:新手快速上手指南

STLink驱动下载与调试实战&#xff1a;从零打通STM32开发链路 你有没有遇到过这样的场景&#xff1f; 刚拿到一块崭新的STM32 Nucleo板&#xff0c;兴冲冲地打开Keil或STM32CubeIDE&#xff0c;点击“Download”却弹出一条冰冷的提示&#xff1a;“ No ST-LINK detected ”…

计算机Java毕设实战-基于SpringBoot少数民族服饰在线销售系统的设计与实现服装商场、商城管理、在线支付、订单处理【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

10款降AI率工具盘点(含最新免费可用版~)

今年毕业季&#xff0c;很多人遇到了新麻烦。如今高校查重不仅严查文字重复率&#xff0c;更死磕“含AI量”。 不论是应对毕业论文终稿&#xff0c;还是期刊投稿&#xff0c;如何有效降低那一抹刺眼的AI红色标记&#xff0c;已成为硬性需求。本文从降AI实效、语句通顺性、排版…

233魔方、圆柱233A

目录 233魔方 1&#xff0c;魔方三要素 2&#xff0c;复原方法 3&#xff0c;公式推导 圆柱233A 复原方法 233魔方 1&#xff0c;魔方三要素 &#xff08;1&#xff09;组成部件 8个角块编号0-7&#xff0c;8个棱块编号0-7 &#xff08;即默认编号&#xff09; &#…

计算机Java毕设实战-基于Springboot的在线订餐系统设计与实现基于SpringBoot框架的线上订餐管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

GitHub CI/CD流水线集成Miniconda-Python3.10自动测试PyTorch代码

GitHub CI/CD流水线集成Miniconda-Python3.10自动测试PyTorch代码 在深度学习项目开发中&#xff0c;最让人头疼的往往不是模型设计本身&#xff0c;而是“为什么我的代码在本地能跑&#xff0c;在别人机器上就报错&#xff1f;”——依赖版本冲突、Python 环境混乱、CUDA 驱动…

Java毕设项目:基于SpringBoot少数民族服饰在线销售系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

AI原生应用领域的思维树:未来发展趋势

AI原生应用领域的思维树&#xff1a;未来发展趋势 关键词&#xff1a;AI原生应用、思维树、未来发展趋势、人工智能、应用场景、技术革新 摘要&#xff1a;本文深入探讨了AI原生应用领域的思维树及其未来发展趋势。从介绍AI原生应用的背景出发&#xff0c;详细解释了思维树这一…

数学物理方程知识点总结

课程提要 本门课程主要学习的是数学物理方程:从具体的物理情景中推导建立偏微分方程方程,并结合定解条件采用对应解法求解。(关于解的存在性、唯一性和稳定性不在课程要求中。) 求解数理方程的解法大致有:分离变量…

Python安装依赖超时?Miniconda-Python3.10启用国内镜像源

Python安装依赖超时&#xff1f;Miniconda-Python3.10启用国内镜像源 在人工智能和数据科学项目中&#xff0c;你是否经历过这样的场景&#xff1a;刚克隆完一个GitHub仓库&#xff0c;满怀期待地运行 pip install -r requirements.txt&#xff0c;结果卡在某个包下载上十几分钟…

161_尚硅谷_切片的课堂练习

161_尚硅谷_切片的课堂练习1.切片的课堂练习题

【课程设计/毕业设计】基于SpringBoot的在线服装商城销售系统基于SpringBoot少数民族服饰在线销售系统的设计与实现【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【毕业设计】基于SpringBoot框架的线上订餐管理系统的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【课程设计/毕业设计】基于SpringBoot的订餐系统设计与实现基于SpringBoot框架的线上订餐管理系统的设计与实现【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

AI原生应用中对话状态跟踪的模型评估与选择

AI原生应用中对话状态跟踪模型的评估框架与选择策略&#xff1a;从传统方法到LLM驱动的演进 元数据框架 标题&#xff1a;AI原生应用中对话状态跟踪模型的评估框架与选择策略&#xff1a;从传统方法到LLM驱动的演进关键词&#xff1a;对话状态跟踪&#xff08;DST&#xff09;、…

不花一分钱!亲测10款免费降ai率工具推荐(2025年12月最新版,亲测有效!)

写论文最崩溃的瞬间是啥&#xff1f;我觉得既不是开题&#xff0c;也不是答辩&#xff0c;而是你辛辛苦苦用AI跑完文献综述&#xff0c;结果查重报告AIGC率90%&#xff0c;导师评语&#xff1a;“建议重写”。 谁懂啊&#xff1f;以前我为了降ai&#xff0c;头都快秃了。手动改…

实测10款降AI率工具:3个免费方法亲测有效!帮你免费降低AI率,论文降AIGC不再头疼!

最近很多同学问我&#xff0c;为什么导师一眼就看出来了论文借助AI了呢&#xff1f; 我一看大家的文章&#xff0c;很多句子读起来太机械了&#xff0c;长句子一堆&#xff0c;读起来别扭。别说导师了&#xff0c;连我都能读的出来。 大家又问了&#xff1a;怎么才能避免这些问…

【毕业设计】基于SpringBoot少数民族服饰在线销售系统的设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java计算机毕设之基于SpringBoot框架的线上订餐管理系统的设计与实现基于Spring Boot的网上订餐系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…