尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Luogu P14007 「florr IO Round 1」查询游戏 题解 [ 蓝 ] [ 交互 ]

Luogu P14007 「florr IO Round 1」查询游戏 题解 [ 蓝 ] [ 交互 ]
📅 发布时间:2026/6/20 2:01:41

查询游戏

原题做法是显然的,子段绝对值最大值可以转化为求出前缀和序列的最大值、最小值,然后两者作差即可。查询操作可以转化为询问前缀和序列中两个元素比大小。因为查询数 \(2n\),所以各扫一遍用擂台法求最大、最小值即可。

注意特判 Sub0 的 \(n = 1, 2\) 的情况:

  • \(n=1\),问前缀和序列中 \(P\) 的 \(P_0, P_1\) 大小关系即可。
  • \(n=2\),问前缀和序列中 \(P\) 的 \(P_0, P_1\)、\(P_1, P_2\)、\(P_0, P_2\) 大小关系即可。

考虑加强版,查询次数被限制在 \(\lfloor \dfrac{3n}{2}\rfloor\) 内的做法。有一个很实用的观察技巧:从小数据入手,通过小数据的情况覆盖大数据的情况。

此题中 \(n = 1\) 时我们仅用 \(1\) 次比较就能分辨出他们的大小关系,所以对于原序列,我们将两个相邻的下标两两配对,像 \(n = 1\) 那样比较二者关系,把较大的放入 \(q1\) 中,小的放入 \(q2\) 中。其中 \(q1, q2\) 为两个队列。注意到 \(q1, q2\) 大小加起来只有 \(n\),所以直接打擂台扫过去,总查询次数为 \(\lfloor \dfrac{3n}{2}\rfloor\)。

#include <bits/stdc++.h>
#define fi first
#define se second
#define eb(x) emplace_back(x)
#define pb(x) push_back(x)
#define lc(x) (tr[x].ls)
#define rc(x) (tr[x].rs)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
using pi = pair<int, int>;
int mxp = 0, mnp = 0, n;
bool res;
vector<int> mnv, mxv;
int main()
{cin >> n;if(n == 1){cout << "! 1 1" << endl;return 0;}if(n == 2){cout << "? 1 1" << endl;cin >> res;if(res == 1) mxp = 1;else mnp = 1;cout << "? " << mnp + 1 << " 2" << endl;cin >> res;if(res == 0) mnp = 2;cout << "? " << mxp + 1 << " 2" << endl;cin >> res;if(res == 1) mxp = 2;cout << "! " << min(mxp, mnp) + 1 << " " << max(mxp, mnp) << endl;return 0;}    for(int i = 1; i <= n; i += 2){cout << "? " << i << " " << i << endl;cin >> res;if(res == 0) mnv.push_back(i), mxv.push_back(i - 1);else mxv.push_back(i), mnv.push_back(i - 1);}if((n + 1) & 1) mxv.push_back(n), mnv.push_back(n);mnp = mnv[0], mxp = mxv[0];for(int i = 1; i < mnv.size(); i++){cout << "? " << mnp + 1 << " " << mnv[i] << endl;cin >> res;if(res == 0) mnp = mnv[i];}for(int i = 1; i < mxv.size(); i++){cout << "? " << mxp + 1 << " " << mxv[i] << endl;cin >> res;if(res == 1) mxp = mxv[i];}    cout << "! " << min(mxp, mnp) + 1 << " " << max(mxp, mnp) << endl;return 0;
}

相关新闻

  • RK3588和FPGA桥片之间IO电平信号概率性不能通信原因 - 实践
  • 蒟蒻的第一篇随笔
  • oppoR9m刷Linux系统: 安装MTK USB VCOM驱动

最新新闻

  • Steam成就管理器完整指南:如何免费轻松管理你的游戏成就
  • 2026年当下上海诚信的硼化锆源头厂家选型全指南 - 品牌鉴赏官2026
  • MC68HC908GP32 SPI通信深度解析:双缓冲机制与OVRF/MODF错误处理实战
  • AI写作辅助平台8款AI论文平台榜单,毕业护航利器!
  • 【微积分】三角函数求导积分公式的图形化记忆法
  • Dify插件集合:AI应用开发中的标准化组件库架构实践

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号