带修莫队模板题

请大佬出门右转

y总进阶课有一道类似的题,我把进阶课的代码交上去发现t了好几个点,我以为我代码常数大,我把y总的代码交上去之后,一直被卡一个点没过。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>using namespace std;const int N = 10010, S = 1000010;int n, m, mq, mc, len;
int w[N], cnt[S], ans[N];
struct Query
{int id, l, r, t;
}q[N];
struct Modify
{int p, c;
}c[N];int get(int x)
{return x / len;
}bool cmp(const Query& a, const Query& b)
{int al = get(a.l), ar = get(a.r);int bl = get(b.l), br = get(b.r);if (al != bl) return al < bl;if (ar != br) return ar < br;return a.t < b.t;
}void add(int x, int& res)
{if (!cnt[x]) res ++ ;cnt[x] ++ ;
}void del(int x, int& res)
{cnt[x] -- ;if (!cnt[x]) res -- ;
}int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= n; i ++ ) scanf("%d", &w[i]);for (int i = 0; i < m; i ++ ){char op[2];int a, b;scanf("%s%d%d", op, &a, &b);if (*op == 'Q') mq ++, q[mq] = {mq, a, b, mc};else c[ ++ mc] = {a, b};}len = cbrt((double)n * mc) + 1;sort(q + 1, q + mq + 1, cmp);for (int i = 0, j = 1, t = 0, k = 1, res = 0; k <= mq; k ++ ){int id = q[k].id, l = q[k].l, r = q[k].r, tm = q[k].t;while (i < r) add(w[ ++ i], res);while (i > r) del(w[i -- ], res);while (j < l) del(w[j ++ ], res);while (j > l) add(w[ -- j], res);while (t < tm){t ++ ;if (c[t].p >= j && c[t].p <= i){del(w[c[t].p], res);add(c[t].c, res);}swap(w[c[t].p], c[t].c);}while (t > tm){if (c[t].p >= j && c[t].p <= i){del(w[c[t].p], res);add(c[t].c, res);}swap(w[c[t].p], c[t].c);t -- ;}ans[id] = res;}for (int i = 1; i <= mq; i ++ ) printf("%d\n", ans[i]);return 0;
}作者:yxc
链接:https://www.acwing.com/activity/content/code/content/500054/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

跑一遍代码。

一直被卡,当我看到评论说当t很小的时候,几乎是和普通莫队一样的时候,采取块长为(n * mc)1/3的大小去做的时候,我们观察到mc为0的时候,块长其实已经变成了1 。这个时候其实做法已经不能保证比较好的时间复杂度了,这时候需要我们进行一个优化,我们把len长度的赋值改为以下版本才能保证比较好的时间复杂度了,如果你采取块长为n2/3 当我没说,本文只针对yxc版本的时间复杂度。

跑一遍代码。

y总的代码在t为0的时候有比较大的缺陷,基本上退化成暴力的时间复杂度,所以会超时,t为0的时候,我们可以考虑把他变成普通莫队,然后时间复杂度可以得以保证在O((n4t)1/3)的时间复杂度。

蒟蒻说了一堆废话 自嗨

~~ 已订正~~

原代码已经会被卡掉了

带修莫队 的 小优化 (针对yxc版本)相关推荐

  1. 莫队+带修莫队模板与总结

    以下总结参考了许多大佬们的博客,开篇先(大佬)% 莫队的入门题目主要为莫队和带修莫队在,这里就先在这里总结一下这两类题目的一些属性. 我认为莫队本质是一种比较优化的暴力查找法.在通过分块操作后把复杂度 ...

  2. 莫队算法 (普通莫队、带修莫队、树上莫队)

    莫队算法 主要基于分块的思想 用结构体记录询问的左右端点及询问编号 (这是一个离线算法) 通过排序优化指针扫描顺序优化时间复杂度 . 1.普通莫队 例题:SP3267 DQUERY - D-query ...

  3. 莫队算法(普通莫队、带修莫队、树上莫队、不删除莫队)学习笔记【理解+套路/核心代码+例题及题解】

    一.理解 我的理解就是巧妙的暴力,利用双指针以及分块思想,巧妙的移动双指针,时间复杂度可以达到O(NlogN). 强推博客:写的又好又全.链接 二.套路 1.普通莫队 [1]核心代码 bool cmp ...

  4. 莫队和带修莫队 学习笔记

    哎,很纠结,我刚学这个东西,感觉好像本身自己理解得就不深刻,所以好像不知道该怎么写这个学习笔记了,估计是我思路最凌乱,语言最没逻辑的一篇学习笔记吧.(如果看到这儿觉得作者会坑就关掉吧..) 好,我来尝 ...

  5. 莫队算法学习笔记(二)——带修莫队

    前言:什么是莫队 莫队算法,是一个十分优雅的暴力. 普通的莫队可以轻松解决一些离线问题,但是,当遇上了一些有修改操作的问题,普通莫队就无能为力了. 于是,改进后的莫队--带修莫队就这样产生了. L i ...

  6. 牛客练习赛85 数学家的迷题 (带修莫队/线段树)

    题意: 1:将a[id]a[id]a[id]的值改为xxx. 2:令t=a[l]×a[l+1]×...×a[r−1]×a[r]t=a[l]×a[l+1]×...×a[r−1]×a[r]t=a[l]×a ...

  7. [国家集训队]数颜色 / 维护队列 (带修莫队模板题)

    题意: 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. ...

  8. HDU - 6610 Game(带修莫队)

    题目链接:点击查看 题目大意:给出一个长度为 n 的序列 a,sum 为数列 a 的前缀异或和,再给出 m 次操作,每次操作分为两种类型: 1 l r:询问 sum 在区间 [ l , r ] 内有多 ...

  9. LG P4074 [WC2013] 糖果公园(带修莫队,树上莫队)

    LG P4074 [WC2013] 糖果公园 Solution 树上带修莫队,主要还是复习带修莫队和树上莫队. 带修莫队: 带修莫队要先对lll分块的序号作为第一关键字,对rrr分块的序号作为第二关键 ...

最新文章

  1. 屏幕后处理——Bloom
  2. eclipse+pydev快捷键
  3. 产品经理和程序员的黑话
  4. Windows Mobile 中怎样获得当前应用程序所在路径
  5. Spring Cloud 配置中心中的native配置
  6. Scribe+HDFS日志收集系统安装方法
  7. vijos p1059——积木城堡
  8. Atitit 眼科医学之道 attilax总结
  9. python删库命令_python3 删除数据库
  10. 使用Visual Paradigm画ER图/Visual ER图
  11. 数字图像处理(极简) 第一章 概述(docx)
  12. Unity第一视角流血受伤受攻击屏幕流血效果
  13. iOS展示超大图片或超高分辨率图片崩溃解决方法
  14. 304 Not Modified 是什么意思
  15. 选择4G工业路由器需要注意的细节
  16. 会议怎样召开_是否可以仅使用免费软件来召开会议?
  17. 最美不过少年时,红尘走马,步步相随
  18. Java分布式中文分词组件 - word分词
  19. 墨画子卿第三章第9节:是一个人
  20. 英语四级作文万能模板汇总

热门文章

  1. windows操作系统知识最全
  2. mysql 输入法表情数据,mysql 5.7 版本输入法表情符问题-----java解决办法
  3. 萝卜新版APP一键云端打包/无需电脑/无需AS工具
  4. fatal: detected dubious ownership in repository git报错解决
  5. Python微框架web.py初印象
  6. win10系统picpick截图工具自动滚动截长图方法
  7. 备案需要域名证书吗?如何下载域名证书?
  8. MySql基础篇---004 其它数据库对象篇:视图,存储过程与函数,变量、流程控制与游标 ,触发器
  9. 读《禅与摩托车维修艺术》
  10. 还不懂PID控制?精华都在这了!