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

常见结论与例题

常见结论与例题
📅 发布时间:2026/6/20 2:12:08

常见结论

题意:(区间移位问题)要求将整个序列左移/右移若干个位置,例如,原序列为 \(A=(a_1, a_2, \dots, a_n)\) ,右移 \(x\) 位后变为 \(A=(a_{x+1}, a_{x+2}, \dots, a_n,a_1,a_2,\dots, a_x)\) 。

区间的端点只是一个数字,即使被改变了,通过一定的转换也能够还原,所以我们可以 \(\mathcal O(1)\) 解决这一问题。为了方便计算,我们规定下标从 \(0\) 开始,即整个线段的区间为 \([0, n)\) ,随后,使用一个偏移量 shift 记录。使用 shift = (shift + x) % n; 更新偏移量;此后的区间查询/修改前,再将坐标偏移回去即可,下方代码使用区间修改作为示例。

cin >> l >> r >> x;
l--; // 坐标修改为 0 开始
r--;
l = (l + shift) % n; // 偏移
r = (r + shift) % n;
if (l > r) { // 区间分离则分别操作segt.modify(l, n - 1, x);segt.modify(0, r, x);
} else {segt.modify(l, r, x);
}

常见例题

题意:(带修莫队 - 维护队列)要求能够处理以下操作:

  • 'Q' l r :询问区间 \([l,r]\) 有几个颜色;
  • 'R' idx w :将下标 \(\tt idx\) 的颜色修改为 \(\tt w\) 。

输入格式为:第一行 \(n\) 和 \(q\ (1\le n, q\le 133333)\) 分别代表区间长度和操作数量;第二行 \(n\) 个整数 \(a_1,a_2\dots,a_n\ (1\le a_i\le 10^6)\) 代表初始颜色;随后 \(q\) 行为具体操作。

const int N = 1e6 + 7;
signed main() {int n, q;cin >> n >> q;vector<int> w(n + 1);for (int i = 1; i <= n; i++) {cin >> w[i];}vector<array<int, 4>> query = {{}}; // {左区间, 右区间, 累计修改次数, 下标}vector<array<int, 2>> modify = {{}}; // {修改的值, 修改的元素下标}for (int i = 1; i <= q; i++) {char op;cin >> op;if (op == 'Q') {int l, r;cin >> l >> r;query.push_back({l, r, (int)modify.size() - 1, (int)query.size()});} else {int idx, w;cin >> idx >> w;modify.push_back({w, idx});}}int Knum = 2154; // 计算块长vector<int> K(n + 1);for (int i = 1; i <= n; i++) { // 固定块长K[i] = (i - 1) / Knum + 1;}sort(query.begin() + 1, query.end(), [&](auto x, auto y) {if (K[x[0]] != K[y[0]]) return x[0] < y[0];if (K[x[1]] != K[y[1]]) return x[1] < y[1];return x[3] < y[3];});int l = 1, r = 0, val = 0;int t = 0; // 累计修改次数vector<int> ans(query.size()), cnt(N);for (int i = 1; i < query.size(); i++) {auto [ql, qr, qt, id] = query[i];auto add = [&](int x) -> void {if (cnt[x] == 0) ++ val;++ cnt[x];};auto del = [&](int x) -> void {-- cnt[x];if (cnt[x] == 0) -- val;};auto time = [&](int x, int l, int r) -> void {if (l <= modify[x][1] && modify[x][1] <= r) { //当修改的位置在询问期间内部时才会改变num的值del(w[modify[x][1]]);add(modify[x][0]);}swap(w[modify[x][1]], modify[x][0]); //直接交换修改数组的值与原始值,减少额外的数组开销,且方便复原};while (l > ql) add(w[--l]);while (r < qr) add(w[++r]);while (l < ql) del(w[l++]);while (r > qr) del(w[r--]);while (t < qt) time(++t, ql, qr);while (t > qt) time(t--, ql, qr);ans[id] = val;}for (int i = 1; i < ans.size(); i++) {cout << ans[i] << endl;}
}

相关新闻

  • 单芯片方案分享-CH336F-USB拓展坞+百兆网卡+读卡器+100W快充芯片
  • 于状压的线性 RMQ 算法
  • KD Tree

最新新闻

  • 2026萍乡2026正规漏水检测维修公司精选口碑榜TOP5权威推荐-精准定位检测漏水点-专业防水补漏堵漏维修、卫生间/厨房/屋顶/天沟/地下室/阳台防水漏水检测维修 - 安佳防水
  • 深入解析LPC2478:ARM7TDMI-S内核、双AHB总线与关键外设实战
  • 5倍效率提升:Dify官方插件集的AI集成革命
  • 2026潮州漏水检测维修精选优质服务商TOP5推荐!卫生间漏水/厨房漏水/屋顶天花板漏水/阳台漏水/地下室漏水防水补漏检测维修-正规防水补漏公司优选口碑榜测评推荐 - 即刻修防水
  • 2026年天津GEO优化服务商推荐指南 - GEO优化
  • 2026年近期陕西消防:专业消防技术服务商选择与推荐 - 品牌鉴赏官2026

日新闻

  • 信任的进化:技术实现详解——如何用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 号