大概就是要多加一维time

然后按照(l的块,r的块,time)为关键字排序

转移区间修改还是按照莫队的方式(每个修改要记修改前后的状态)

然后玄学dalao告诉窝块大小设为\(O(n^{\frac{2}{3}})\)最优

// It is made by XZZ
#include<cstdio>
#include<algorithm>
#include<cmath>
#define il inline
#define rg register
#define vd void
#define sta static
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int maxn=10010;
int A[maxn];
int p[maxn],pa[maxn],pb[maxn];
struct ques{int l,r,id,t;}Q[maxn];
int ans[maxn];
int block[maxn];
bool operator <(const ques&a,const ques&b){
if(block[a.l]!=block[b.l])return block[a.l]<block[b.l];
if(block[a.r]!=block[b.r])return block[a.r]<block[b.r];
return a.t<b.t;
}
int tot[1000010],nowans;
il vd fuck(int a,int b){
if(tot[a]==1&&b==-1)--nowans;
if(tot[a]==0&&b==1)++nowans;
tot[a]+=b;
}
int main(){
#ifdef xzz
freopen("1903.in","r",stdin);
freopen("1903.out","w",stdout);
#endif
int n=gi(),m=gi(),k=0,q=0,blo=pow(n,0.67),a,b;
char o[2];
for(rg int i=1;i<=n;++i)A[i]=gi();
for(rg int i=1;i<=n;++i)block[i]=i/blo;
for(rg int i=1;i<=m;++i){
scanf("%s",o),a=gi(),b=gi();
if(o[0]=='Q')++q,Q[q].l=a,Q[q].r=b,Q[q].id=q,Q[q].t=k;
else if(o[0]=='R')++k,p[k]=a,pa[k]=A[a],A[a]=pb[k]=b;
}
std::sort(Q+1,Q+q+1);
int L=1,R=1,T=k;
tot[A[1]]=1;nowans=1;
for(rg int i=1;i<=q;++i){
while(T<Q[i].t){
++T,A[p[T]]=pb[T];
if(L<=p[T]&&p[T]<=R)fuck(pa[T],-1),fuck(pb[T],1);
}
while(T>Q[i].t){
A[p[T]]=pa[T];
if(L<=p[T]&&p[T]<=R)fuck(pb[T],-1),fuck(pa[T],1);
--T;
}
while(L>Q[i].l)--L,fuck(A[L],1);
while(R>Q[i].r)fuck(A[R],-1),--R;
while(R<Q[i].r)++R,fuck(A[R],1);
while(L<Q[i].l)fuck(A[L],-1),++L;
ans[Q[i].id]=nowans;
}
for(rg int i=1;i<=q;++i)printf("%d\n",ans[i]);
return 0;
}

P1903 [国家集训队]数颜色 带修改莫队板子的更多相关文章

  1. BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]

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

  2. P1903 [国家集训队]数颜色 (带修改莫队)

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

  3. bzoj 2120 数颜色 带修改莫队

    带修改莫队,每次查询前调整修改 #include<cstdio> #include<iostream> #include<cstring> #include< ...

  4. BZOJ2120数颜色(带修改莫队)

    莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...

  5. [国家集训队][bzoj2120] 数颜色 [带修改莫队]

    题面: 传送门 思路: 这道题和SDOI2009的HH的项链很像,只是多了一个修改 模板套上去呀 莫队学习请戳这里:莫队 Code: #include<iostream> #include ...

  6. COGS.1901.[模板][国家集训队2011]数颜色(带修改莫队)

    题目链接 COGS BZOJ2120 洛谷P1903 /* Add和Subd函数中的vis不能直接设为=1或=0 比如 l=1,r=0 -> l=3,r=5 时,[1,5]的vis标记全都是1 ...

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

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

  8. 洛谷 P1903 [国家集训队]数颜色 解题报告

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

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

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

随机推荐

  1. [翻译] CSStickyHeaderFlowLayout

    CSStickyHeaderFlowLayout https://github.com/jamztang/CSStickyHeaderFlowLayout Parallax, Sticky Heade ...

  2. 使用keychain永久存储数据

    使用keychain永久存储数据 https://github.com/soffes/sskeychain keychain当然还是使用开源的好:),keychain是干啥用的?这个,baidu一下你 ...

  3. amazon interview

    I'll be sitting for an Amazon interview in 3 months. Which website should I use to practice: SPOJ, H ...

  4. Linux ntpdate命令详解

    ntpdate命令用于同步更新互联网时间,或者NTP服务器时间 NTP服务器[Network Time Protocol(NTP)]是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源 ...

  5. springmvc 拦截器的使用小结

    /** * * * * 拦截器的作用: * 每个请求到达Controller之前,或者每个响应到达view之前,都可以进行拦截. * 1.全局日志(谁提交了请求,要做什么事) * 2.权限管理(每个请 ...

  6. Qt如何设置应用ico图标

    第一步,创建ico文件.将ico图标文件复制到工程文件夹目录中(注意必须是图标文件,任何格式的改后缀都不行) ,重命名为"myico.ico“.然后在该目录中右击,新建文本文档,并输入一行代 ...

  7. C# 页面调用控制台应用程序

    var rootPath = System.Configuration.ConfigurationManager.AppSettings["rootPath"]; Process. ...

  8. Undefined function or method 'deploywhich' for input arguments of type 'char'

    在进行matlab和java混合编程的时候.由matlab打包,把m文件转换为jar文件.供java调用.有时在Tomcat中调用此类jar类会出现如题或者以下的错误: ??? Error using ...

  9. 企业案例 【故障修复】mysql主从故障解决过程

    由于配置有zabbix监控,某日收到zabbix监控主从报警,,查看mysql状态, showslave status \G; slave复制状态有误,SLAVE_SQL_RUNNING为NO, 接着 ...

  10. 解决JS在url中传递参数时参数包含中文乱码的问题

    1.传参页面JavaScript代码: function go_mark(id,jobname,headimgurl,nickname){ window.location.href = "m ...