/*洛谷1903*/
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<set>
#include<queue>
using namespace std;
#define ll long long
const int ding=5e5+5;
int mp[ding],block[ding],l=1,r=0,vis[1000005],ans,sum[ding],no[ding];
struct Alter{int id,num,old,nnew;
}alte[ding];
struct Query{int id,notime,L,R;
}que[ding];
bool cmp(Query a,Query b){if(block[a.L]==block[b.L]){if(block[a.R]==block[b.R]){return a.notime<b.notime;}return a.R<b.R;}return a.L<b.L;
}
bool cmp2(Query a,Query b){return a.id<b.id;
}
void revise(int x,int cnt){if(cnt==1){if(vis[x]==0){ans++;}vis[x]++;}else {if(vis[x]==1){ans--;}vis[x]--;}
}
void doit(int x,int y){if(l<=x&&x<=r){revise(mp[x],-1);revise(y,1);}mp[x]=y;
}int main()
{std::ios::sync_with_stdio(false);int n,m;scanf("%d %d",&n,&m);memset(vis,0,sizeof(vis)); int i,t=1,tt=1,L,R,T=1;char cc[3];const int blo=floor(pow(n,0.666666));//玄学优化 for(i=1;i<=n;i++){scanf("%d",&mp[i]); no[i]=mp[i];block[i]=(i-1)/blo+1;}
//      cout<<"mp   "<<mp[61]<<" "<<mp[62]<<" "<<mp[63]<<endl;  for(i=1;i<=m;i++){scanf("%s %d %d",cc,&L,&R);if(cc[0]=='R') {alte[t++]=(Alter){t-1,L,no[L],R};no[L]=R;//这里要注意一下,每次都要记住 }else{que[tt++]=(Query){tt-1,t,L,R};}}sort(que+1,que+tt,cmp);for(i=1;i<tt;i++){//看下当前的时间线是否已经全部修改了//然后进行相应的往后往前修改 while(T<que[i].notime){doit(alte[T].num,alte[T].nnew);T++;}while(T>que[i].notime){T--;doit(alte[T].num,alte[T].old);}while(l<que[i].L)revise(mp[l++],-1);while(l>que[i].L)revise(mp[--l],1);while(r<que[i].R)revise(mp[++r],1);while(r>que[i].R)revise(mp[r--],-1);sum[que[i].id]=ans;}sort(que+1,que+tt,cmp2);for(i=1;i<tt;i++){printf("%d\n",sum[i]);}return 0;
}

洛谷1903 带修莫队相关推荐

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

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

  2. 牛客练习赛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 ...

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

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

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

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

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

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

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

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

  7. 牛客挑战赛48E-速度即转发【带修莫队,分块】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11161/E 题目大意 给出nnn个数字的一个序列,mmm个操作. 给出l,r,kl,r,kl,r,k,求一个 ...

  8. 分治 —— 莫队算法 —— 带修莫队

    [概述] 普通莫队由于强制离线是不能修改的,但对于强制在线的题,可以在普通莫队的基础上强行加上一维时间轴 time,表示这次操作的时间,即在每个询问前已经完成了多少次修改. 简单来说,就是将询问 [l ...

  9. 【BZOJ4129】Haruna’s Breakfast,树上带修莫队+权值分块求mex

    Time:2016.09.08 Author:xiaoyimi 转载注明出处谢谢 思路: 这道题相当于把昨天学的树上莫队和带修莫队融合了一下,顺便加了一个mex(未出现的最小自然数) 那么主要问题就是 ...

最新文章

  1. Java中HashMap和TreeMap的区别深入理解
  2. webpack笔记_(1)_webpack 安装
  3. 大数据商业智能的十大戒律
  4. python多线程实现同时下载_Python实现多线程下载
  5. Cisco Packet Tracer思科模拟器中OSPF动态路由配置
  6. Linux中tar压缩命令详解
  7. 简要介绍弱监督学习(by 周志华)
  8. 常用编码说明-GB2312
  9. SDUT 1160 某年某月的天数
  10. 怎么查看自己电脑的iP地址,3个方法推荐
  11. 迅雷欲缔造互联网“视频梦工厂”
  12. 解剖caffe mode:Blobs, Layers和Nets
  13. 测试你适合的发型软件叫什么,有没有测试发型的app 测试自己适合什么发型
  14. 2021斯坦福大学计算机系完整课程列表
  15. DebianLinux下如何安装软件(转)
  16. 计算机网络——域名系统DNS
  17. AI的下一主战场 —— 手机与物联网终端
  18. Axure RP 9.0.0.3719 更新日志 授权码
  19. 接受dtmb地面波数字信号,免费看电视
  20. Java8 lambda表达式

热门文章

  1. 颜色的识别方法和探索 基于matlab
  2. H5拖拽地址-高德地图VUE版
  3. 知道文件扩展名,如何获得在系统中该文件类型的图标
  4. 国内自由下载jar包的地址
  5. 使用docker安装拼音分词器
  6. 在线教育火拼硬件,是炒概念还是真转型?
  7. 如何看待家长培训课?
  8. matlab 雷电,利用MATLAB实现对雷电监测数据的分析和绘图
  9. 信息差副业小项目,高利润,新手日入500+
  10. Linux ln -sfn命令