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

*题解:P4375 [USACO18OPEN]Out of Sorts G

洗稿自 OU 的非常牛的题解,写出来纯粹是证明我看懂了。

原题链接

解析

首先我们来考虑单向冒泡的情况,此时我们向右进行交换,每轮会交换过来一个当前不在正确位置上的最大元素。反过来想,就是有一个不处于正确位置上的元素被交换往左走了一步。

所以,虽然每轮当中元素可能往右走很多步,但是正确位置在当前位置左边的元素必定往左走一步,也就是说,初始离正确位置最右的元素,离正确位置的距离即为所求。

对于双向冒泡,我们用类似的方法考虑,区别在于不处于正确位置上的元素可以往左走不止一步。从小到大考虑每个区间 \([i,n]\),每轮操作会将一个属于这个区间的元素移入正确位置,将一个不属于这个区间的元素移出区间。所以,初始时对于所有区间,不属于该区间的元素数量的最大值即为所求。

具体实现是,先将 \(a\) 离散化,然后按下标从大到小把 \(a_i\) 放到树状数组里,不属于区间 \([i,n]\) 的元素实际上就是排名比 \(i\) 小的元素。对于相同元素的处理,我们令初始下标更大的元素排名更大以避免原本属于区间的元素被归为不属于。

时间复杂度 \(O(n \log n)\)

代码

#include <bits/stdc++.h>
#define ls(p) ((p) << 1)
#define rs(p) (((p) << 1) | 1)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = 1e5 + 5,M = 6e6,mod = 998244353;
int a[N],b[N];
struct cmp{bool operator()(pii a,pii b){return a.first != b.first ? a.first < b.first : a.second < b.second;}
};
void add(int x,int k){for(;x < N;x += x & -x){b[x] += k;}
}
int ask(int x){int res = 0;for(;x;x -= x & -x){res += b[x];}return res;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);int n;cin>>n;vector<pii> v;for(int i=1;i<=n;i++){cin>>a[i];v.push_back({a[i],i});}sort(v.begin(),v.end());for(int i=1;i<=n;i++){int pos = lower_bound(v.begin(),v.end(),make_pair(a[i],i),cmp()) - v.begin() + 1;a[i] = pos;}int res = 1;for(int i=n;i>=1;i--){add(a[i],1);res = max(res,ask(i - 1));}cout<<res;return 0;
}
http://www.jsqmd.com/news/610115/

相关文章:

  • 用Python搞定拉普拉斯变换:从电路分析到微分方程实战(附完整代码)
  • Autoware中基于点云聚类的障碍物检测:从仿真环境搭建到算法实践
  • 极客玩法:用OpenClaw和Qwen3.5-9B搭建个人AI运维助手
  • LLM API成本优化LLM API成本优化实战:日均10万调用如何将月费从2万降到8千
  • 2026新手雪茄购全指南:雪茄品鉴/雪茄培训/雪茄收藏/雪茄配件/非古雪茄/高希霸/高端雪茄/中式雪茄/选择指南 - 优质品牌商家
  • 全志科技Linux驱动开发面试经验与Cache一致性解析
  • 【MCP over Python 架构黄金标准】:基于gRPC+FastAPI+Redis Stream的5层解耦设计图,已通过10万TPS压测验证
  • 2026无锡公司注册怎么选:董事会变更/跨区地址变更/降资/代理记账/公司变更/公司名称变更/公司注销/选择指南 - 优质品牌商家
  • 2026年烟台全屋定制怎么选?这5家实力厂商值得重点关注 - 2026年企业推荐榜
  • 考研高数必备:三角积分速记口诀与实战技巧(附常见错误分析)
  • 2026青砖青瓦实力厂家名录:陕西古建配件生产厂家/陕西青砖青瓦厂家/青砖青瓦厂家哪家实力大/选择指南 - 优质品牌商家
  • 批量修改图片DPI信息工具操作指南:统一图片DPI标注的本地处理流程
  • LPC11U24单总线DHT22/RHT03轻量驱动实现
  • 深度传感相机实时人体检测与韩流/动漫形象转换系统——完整实现指南
  • Obsidian 日记:从模板到 Dataview 自动化
  • MLX9062x红外热成像传感器驱动开发与温度解算详解
  • 2026成都防水补漏公司排行:3家正规机构维度对比 - 优质品牌商家
  • 拟上市企业的“关键一跃”:2026年股权激励服务如何定义未来竞争格局 - 2026年企业推荐榜
  • PyTorch模型转Cuvil可执行文件仅需3行代码?揭秘Meta内部已验证的轻量级AI推理流水线(限200人早鸟文档)
  • C语言字符串与指针操作技巧解析
  • 嵌入式开发中函数返回值设计的工程实践
  • 2026年如何甄选优质喷淋塔供应商?这家一体化服务商值得关注 - 2026年企业推荐榜
  • 从数据采集到回放验证:ADTF 适配 ROS 的 ADAS 测试实践谒
  • 打工人必备!8个AI办公神器,每天准时下班不是梦
  • C++信号量(Semaphore)实战:多线程同步的艺术
  • 4月8号
  • 技术分享 | 一则Oracle数据库IO性能问题分析案例
  • 前瞻2026:不锈钢轧花网选型指南与安平实力服务商解析 - 2026年企业推荐榜
  • SEATA分布式事务——AT模式一
  • 河北球场围栏实力盘点:2026年五大优质服务商深度测评与采购指南 - 2026年企业推荐榜