大概就是要多加一维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. python已写内容中可能的报错及解决办法

    理论上我发的每个短文,直接复制放到py里面,python xx.py是可以执行的,不过因为版本,编码什么的问题会有报错,详见这里 报错: SyntaxError: Non-ASCII characte ...

  2. [C++] 用Xcode来写C++程序[1] 新建C++项目工程

    用Xcode来写C++程序[1] 新建C++项目工程 第一节从新建工程并编译C++源码开始 新建工程 源码: // // main.cpp // YeHelloWorld // // Created ...

  3. 外键应用(foreignkey)、多对多

    1.创建model: 定义hv表,保存hv server infors: 定义vm表,保存vm infors: 一个vm只能对应一台hv server:一台hv server可以包含有多台vm cla ...

  4. 铁乐学python_day20_面向对象编程2

    面向对象的组合用法 软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合. 例:人狗大战,人类绑定上武器来对狗进行攻击: # 定 ...

  5. vs2012配置

    ogre1.9 http://m.blog.csdn.net/blog/u013025310/20869871 http://www.cnblogs.com/zhouxin/p/4258849.htm ...

  6. 个人技术博客(1/2)android布局技巧

    (1)weight属性的合理应用 当使用match_parent(fill_parent)时,需要经过计算,否则会出现如下情况 代码: <LinearLayout xmlns:android=& ...

  7. Ubuntu 64 + IntelliJ IDEA + Genymotion 搭建Android开发环境

    环境搭建所需可至 http://pan.baidu.com/s/1gd1Kf4Z 下载 注:     此处假定 Ubuntu 用户名为 chenfei     开发相关全部存放在 /home/chen ...

  8. CSS3 新增颜色表示方式

    一.CSS1&2颜色表示方式(W3C标准) 1.Color name  颜色名称方式(用颜色关键字表示对应的颜色.) 例如:red(红色).blue(蓝色).pink(粉色) 优点:方便快捷而 ...

  9. 【转】合格PHP工程师的知识结构

    PHP的运行环境 连环境都搞不起来,就是你有多么喜欢PHP,那也是白搭,开始我们大多会使用集成环境软件例如xampp,wamp.随着知识的增加慢慢要学会自己搭建运行环境,例如 Linux(Ubuntu ...

  10. 使用sqoop过程

    With Sqoop, you can import data from a relational database system or a mainframe(主机) into HDFS. The ...