#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#define R(a,b,c) for( register int (a) = (b); (a) <= (c); ++(a))
#define nR(a,b,c) for( register int (a) = (b); (a) >= (c); --(a))
#define Max(a,b) ((a) >= (b) ? (a) : (b))
#define Min(a,b) ((a) <= (b) ? (a) : (b))
#define Iv inline void
#define Ii inline int
#define Il inline long long
#define ll long long
#define re register
struct ios{
template <typename ATP> inline ios& operator >> (ATP &x) {
x=0; int f=1; char c;
for (c=getchar(); c<'0' || c>'9'; c=getchar()) if(c == '-') f=-1;
while (c >= '0' && c <= '9') x = x * 10 + (c ^ '0'), c=getchar();
x*=f;
return *this;
}
template <typename ATP> inline ios& operator << (ATP x) {
int digit = 0; char sch[67];
if( x == 0) { putchar ('0'); return *this;}
if (x < 0) { x = -x, putchar ('-');}
while (x) sch[++digit]=x % 10 ^ '0', x /= 10;
for (register int i=digit; i; --i) putchar (sch[i]);
return *this;
}
} io;
using namespace std;
//#define InputAndOutput_Bug_Test
#ifdef InputAndOutput_Bug_Test
int main(){
while (1) {
long long x;
io >> x;
cout << x << endl;
io << x;
putchar ('\n');
}
}
#endif
const int N=50007;
int col[N];
int TotColor[1000007],NowColor[N];
int block[N];
int ans[N],Ans;
int l=1,r; struct Query{
int l,r,tim,id;
bool operator< (const Query &b)const{
if(block[l]==block[b.l]){
if(block[r]==block[b.r])
return tim<b.tim;
else
return r<b.r;
}
else
return l<b.l;
}
}q[N]; struct Change{
int pos,New,Old;
}c[N]; Iv Modify(int workColor,int d){
TotColor[workColor]+=d;
if(d>0)
Ans+=(TotColor[workColor]==1);
if(d<0)
Ans-=(TotColor[workColor]==0);
}
Iv Going(int pos,int workColor){
if(l<=pos&&pos<=r){
Modify(workColor,1),
Modify(col[pos],-1);
}
col[pos]=workColor;
} int main(){
int n,m; io>>n>>m;
int unit=pow(n,0.666666);
R(i,1,n){
io>>col[i],
NowColor[i]=col[i],
block[i]=(i-1)/unit+1;
} int tot=0,Time=0;
R(i,1,m){
char opt;
for(opt=getchar();opt!='Q'&&opt!='R';opt=getchar());
if(opt=='Q'){
int l,r;
io>>l>>r,
q[++tot]=(Query){l,r,Time,tot};
}
else{
int pos,newColor;
io>>pos>>newColor,
c[++Time]=(Change){pos,newColor,NowColor[pos]},
NowColor[pos]=newColor;
}
} sort(q+1,q+tot+1);
Time=0;
R(i,1,tot){
while(Time<q[i].tim) Going(c[Time+1].pos,c[Time+1].New),++Time;
while(Time>q[i].tim) Going(c[Time].pos,c[Time].Old),--Time;
while(l<q[i].l) Modify(col[l],-1),++l;
while(l>q[i].l) Modify(col[l-1],1),--l;
while(r<q[i].r) Modify(col[r+1],1),++r;
while(r>q[i].r) Modify(col[r],-1),--r; ans[q[i].id]=Ans;
} R(i,1,tot){
io<<ans[i],
putchar('\n'); } return 0;
}

Luogu P1903 [国家集训队]数颜色 / 维护队列 (带修莫队)的更多相关文章

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

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

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

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

  3. luogu 1903 [国家集训队]数颜色 / 维护队列 带修改莫队

    十分玄学的数据结构~ code: #include <bits/stdc++.h> #define N 1000006 #define setIO(s) freopen(s".i ...

  4. P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队

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

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

    传送门 解题思路 带修莫队,第一次写,其实和普通莫队差不多,就是多了个时间轴,块分n^(2/3)最优,时间复杂度O(n^(5/3)). #include<iostream> #includ ...

  6. bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)

    P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...

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

    思路 带修莫队的板子 带修莫队只需要多维护一个时间的指针即可,记录一下每个询问在第几次修改之后,再回退或者前进几个修改操作 排序的时候如果a.l和b.l在一个块里,就看r,如果a.r和b.r在一个块里 ...

  8. P1903 [国家集训队]数颜色 / 维护队列(带修莫队)

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

  9. 洛谷P1903 [国家集训队]数颜色 / 维护队列 ( 带 修 )

    题意:有两种操作: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 对每个1操作 输出答案: 带修莫队 模板题 (加 ...

随机推荐

  1. 【产品】如何写好APP描述

    你有没有想过越是需要花钱购买的 App,用户会更认真阅读你的 App描述?本文列举了15个 app 描述,看看哪些是我们以前忽略了的,哪些是我们也犯过的错误.图中有红色背景的文字是需要强调的地方,这些 ...

  2. 羽夏笔记—— AT&T 与 GCC

    写在前面   本文是本人根据<AT&T 汇编语言与 GCC 内嵌汇编简介>进一步整理,修改了一些错误,并删除我并不能复现代码相关的部分.该文章一是我对 AT&T 的学习记录 ...

  3. .net6.0 中一个接口多个实现的服务注册与注入

    1.现有一个数据库操作接口 如下   它有两个数据操作实现 Sqlserver 和MySql的数据库操作实现类 现在我们需要 将这个两个类 注册到MVC中 注意这里注册的服务类型都是 IDataBas ...

  4. 20212115 实验二 《python程序设计》实验报告

    实验二 计算器设计 #20212115 2021-2022-2 <python程序设计> 实验报告二 课程: 课程:<Python程序设计>班级: 2121姓名: 朱时鸿学号: ...

  5. net core天马行空系列-微服务篇:全声明式http客户端feign快速接入微服务中心nacos

    1.前言 hi,大家好,我是三合,距离上一篇博客已经过去了整整两年,这两年里,博主通关了<人生>这个游戏里的两大关卡,买房和结婚.最近闲了下来,那么当然要继续写博客了,今天这篇博客的主要内 ...

  6. 解决跨海高并发崩溃难题?so easy

    近年来随着互联网强势的发展浪潮,越来越多的企业选择跨境出海,扩展海外市场.而想要在一个陌生市场最快速地吸引到用户,一定不能缺少的就是丰富多样的各类活动.然而活动在带来大流量的同时,也带来了一些问题,比 ...

  7. JavaScript String -> Number

    五种将String类型转化为Number类型的方法:   方法一:使用一元运算符:eg:字符串'5' +'5' -> 5;  5+null -> 5(null转化为0);  '5'+nul ...

  8. Weakmap详解

    先看一个例子 let obj = { name: 'toto' } // { name: 'toto' }这个对象能够被读取到,因为obj这个变量名有对它的引用 // 将引用覆盖掉 obj = nul ...

  9. 记录一个奇葩 bug [Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)]

    关于 flask 的一个记录 代码 @auth.login_required @app.route('/add', methods=['POST']) def add(): if request.me ...

  10. BUUCTF-佛系少年

    佛系少年 这题我感觉超扯,不知道当时环境是不是断网的,断网咋解密的出来.. 下载后有个压缩包,带加密的,首先16进制看看是否是真加密 这里可以看到,压缩包数据区这里都是未加密的方式 但是到了压缩包目录 ...