正题

题目链接:https://www.luogu.com.cn/problem/P1903


题目大意

要求支持两个操作

  1. QLR:Q\ \ L\ \ R:Q  L  R:询问L,RL,RL,R之间有多少个不同的数
  2. RPCol:R\ \ P\ \ Col:R  P  Col:将PPP修改为ColColCol

解题思路

莫队中多加一个时间维度ttt表示前面有多少个修改操作,然后莫队即可。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=143333;
struct que_node{int id,t,l,r;
}que[N];
struct cha_node{int pos,val,pre;
}cha[N];
int n,m,c[N],ans[N],answer,cnt,tot,T;
int v[1000010];
bool operator<(que_node x,que_node y){if(x.l/T!=y.l/T)return x.l/T<y.l/T;if(x.r/T!=y.r/T)return x.r/T<y.r/T;return x.t<y.t;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&c[i]);for(int i=1;i<=m;i++){char op[3];int x,y;scanf("%s%d%d",op,&x,&y);if(op[0]=='Q'){if(x>y)swap(x,y);que[++cnt]=(que_node){cnt,tot,x,y};}else{cha[++tot]=(cha_node){x,y,c[x]};c[x]=y;}}T=ceil(exp((log(n)+log(tot))/3));for(int i=tot;i>=1;i--)c[cha[i].pos]=cha[i].pre;sort(que+1,que+1+cnt);int l=1,r=0,t=0;for(int i=1;i<=cnt;i++){while(que[i].l<l)answer+=!v[c[--l]]++;while(que[i].l>l)answer-=!--v[c[l++]];while(que[i].r>r)answer+=!v[c[++r]]++;while(que[i].r<r)answer-=!--v[c[r--]];while(que[i].t<t){int pos=cha[t].pos;if(l<=pos&&pos<=r)answer-=!--v[c[pos]];c[pos]=cha[t--].pre;if(l<=pos&&pos<=r)answer+=!v[c[pos]]++;}while(que[i].t>t){int pos=cha[++t].pos;if(l<=pos&&pos<=r)answer-=!--v[c[pos]];c[pos]=cha[t].val;if(l<=pos&&pos<=r)answer+=!v[c[pos]]++;}ans[que[i].id]=answer;}for(int i=1;i<=cnt;i++)printf("%d\n",ans[i]);return 0;
}

P1903-[国家集训队]数颜色/维护队列【带修莫队】相关推荐

  1. 带修莫队 ---- P1903 [国家集训队]数颜色 / 维护队列 带修莫队模板

    题目链接 题目大意: 解题思路: 带修改的莫队 首先我们要知道,普通的莫队算法是不资瓷修改操作的, 不过后人对莫队算法加以改进 发明了资瓷修改的莫队算法 思路 在进行修改操作的时候,修改操作是会对答案 ...

  2. P1903 [国家集训队]数颜色 / 维护队列

    关于时间复杂度 对于多维莫队的复杂度差不多为\(O(n^{\frac{2k-1}{k}})\) 摘自zhihu大佬 奇偶分类优化 return a.l == b.l ? (a.l & 1) ? ...

  3. 洛谷 P1903 [国家集训队]数颜色 / 维护队列

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

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

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

  5. luoguP1903 [国家集训队]数颜色 / 维护队列

    带修改莫队经典题目 关于莫队的一篇很好的blog 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第 ...

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

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

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

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

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

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

  9. [国家集训队]数颜色

    [国家集训队]数颜色 题解 很水的一道带修莫队板子题. 我们只需要将操作时间看作是当前询问的第三维,排序后跑莫队即可. 三维莫队块长为n23n^{\frac{2}{3}}n32​时时间复杂度是最优的, ...

最新文章

  1. [How TO]-在ubuntu20.10上搭建SVN Server
  2. mysql的存储覆盖_mysql覆盖存储
  3. java获取10位随机数_Java基础:JAVA中BitSet使用详解
  4. 我的Mac os x中的nginx配置文件nginx.conf
  5. 创建型、结构型、行为型模式(2)
  6. oracle备份能备份索引吗,ORACLE会使索引失效的条件
  7. 从Eclipse切换到IDEA后需要做的事情
  8. Hadoop,MapReduce
  9. MVC 打印解决方案--SNF快速开发平台3.1
  10. AD7705应用总结:
  11. unity移动平台阴影解决方案
  12. 农历及农历闰月的计算方法
  13. 洪磊父亲详述被拘细节:银行卡共100万
  14. 区块链自由意志数据隐私安全
  15. 闲鱼:Thread.sleep(0) 到底有什么用?我:有点懵~
  16. 第2章:Android的编译环境--build系统
  17. excel组合汇总_Excel汇总20140414
  18. 计算机管理磁盘管理无法删除卷,如何解决对磁盘重新分区磁盘卷无法删除的问题...
  19. Kernel panic - not syncing
  20. keil的debug使用

热门文章

  1. python姓名输出语句_Python最基本的输入输出详解
  2. JAVA中pin什么意思_java语言中的多态概述
  3. 新编计算机英语第六章,新编计算机英语-电子教案.ppt
  4. mysql控制台教程视频教程_mysql 控制台操作
  5. java new 面试_java面试30问
  6. java os库_java-Mac OS X上的JNotify?
  7. final类是否可以被代理_浅谈Java【代理设计模式】——看这篇文章就懂了
  8. 深圳店匠笔试题-4.01
  9. 洛谷T172098 子串-substr
  10. 微信小程序点击按钮弹出弹窗_微信小程序实现的点击按钮 弹出底部上拉菜单功能示例...