题链:

https://www.luogu.org/problemnew/show/P1903
题解:

序列带修莫队,

推荐博客https://www.cnblogs.com/Paul-Guderian/p/6933799.html

复杂度$O(N^{\frac{5}{3}})$
代码:

include<bits/stdc++.h>
#define MAXN 10005
using namespace std;
int N,M,BLOCK,ans;
int color[1000006],s[MAXN],bel[MAXN],ANS[MAXN];
struct Query{
int l,r,t,id;
bool operator < (const Query &rtm) const{
return bel[l]==bel[rtm.l]?(bel[r]==bel[rtm.r]?t<rtm.r:bel[r]<bel[rtm.r]):bel[l]<bel[rtm.l];
}
}Q[MAXN];
struct Change{int p,newval,oldval;}C[MAXN];
int L=1,R,T;
void modify(int p,int k){
color[s[p]]+=k;
if(color[s[p]]==0&&k==-1) ans--;
if(color[s[p]]==1&&k==1) ans++;
}
void dotime(int p,int v){
if(L<=p&&p<=R) modify(p,-1),s[p]=v,modify(p,1);
else s[p]=v;
}
int main(){
static int now[MAXN];
char ch; int x,y,qnt=0,tim=0;
scanf("%d%d",&N,&M); BLOCK=pow(N,2.0/3);
for(int i=1;i<=N;i++) bel[i]=i/BLOCK;
for(int i=1;i<=N;i++) scanf("%d",&s[i]),now[i]=s[i];
for(int i=1;i<=M;i++){
scanf(" %c%d%d",&ch,&x,&y);
if(ch=='Q') qnt++,Q[qnt]=(Query){x,y,tim,qnt};
else tim++,C[tim]=(Change){x,y,now[x]},now[x]=y;
}
sort(Q+1,Q+qnt+1);
for(int i=1;i<=qnt;i++){
while(T<Q[i].t) T++,dotime(C[T].p,C[T].newval);
while(T>Q[i].t) dotime(C[T].p,C[T].oldval),T--;
while(R<Q[i].r) R++,modify(R,1);
while(R>Q[i].r) modify(R,-1),R--;
while(L<Q[i].l) modify(L,-1),L++;
while(L>Q[i].l) L--,modify(L,1);
ANS[Q[i].id]=ans;
}
for(int i=1;i<=qnt;i++) printf("%d\n",ANS[i]);
return 0;
}

  

●洛谷P1903 [国家集训队]数颜色的更多相关文章

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

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

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

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

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

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

  4. [洛谷P1903][国家集训队]数颜色

    题目大意:有$n$支画笔,有两个操作 $Q\;l\;r:$询问$[l,r]$中有几种颜色 $R\;p\;Col:$把第$p$支画笔的颜色改成$Col$ 题解:带修莫队,分为$n^{\frac{1}{3 ...

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

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

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

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

  7. 洛谷 P1903 [国家集训队]数颜色

    题意简述 给定一个数列,支持两个操作 1.询问l~r有多少不同数字 2.修改某个数字 题解思路 带修莫队 如果修改多了,撤销修改 如果修改少了,进行修改 代码 #include <cmath&g ...

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

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

  9. P1903 [国家集训队]数颜色 / 维护队列(莫队区间询问+单点修改)

    题目链接:https://www.luogu.org/problemnew/show/P1903 题目大意:中文题目 具体思路:莫队单点修改+区间询问模板题,在原来的区间询问的基础上,我们要记录当前这 ...

随机推荐

  1. TensorFlow问题“The TensorFlow library wasn't compiled to use SSE instructions, but these are available on your machine and could speed up CPU computations.”

    出现的问题: 在使用TensorFlow跑官方教程例子时报以下warning: 虽程序能正常跑出结果,但作为一名强迫症患者对此很是不爽,于是查找资料找到隐藏该warning的解决办法. 解决办法: 在 ...

  2. 冲刺NO.2

    Alpha冲刺第二天 站立式会议 项目进展 团队成员在确定了所需技术之后,开始学习相关技术的使用,其中包括了HTML5,CSS与SSH框架等开发技术.并且在项目分工配合加以总结和完善,对现有发现的关于 ...

  3. bisect 二分查找

    先说明的是,使用这个模块的函数前先确保操作的列表是已排序的. 先看看 insort  函数: 其插入的结果是不会影响原有的排序. 再看看 bisect  函数: 其目的在于查找该数值将会插入的位置并返 ...

  4. UWP 页面间传递参数(常见类型string、int以及自定义类型)

    这是一篇很基础的,大佬就不要看了,也不要喷,谢谢

  5. JS页面跳转的常用方法整理.

    <script type="text/javascript"> //js页面跳转 function showtabs() { window.location.href ...

  6. JVM学习记录

    本博客是为了自己学习JVM而建立,只记录一些自己学习的经过. 最近在看<深入理解Java虚拟机>这本书,里面的内容,很是乏味,因为看不懂所以就会觉得很枯燥,觉得很枯燥看着看着就犯困,然后就 ...

  7. 初次面对c++

    第一次实验 2-4源码: #include<iostream> using namespace std; int main() { int day; cin>>day; swi ...

  8. ssh整合之四单独搭建struts的运行环境

    1.导入struts的基本jar包 2.在web.xml中配置我们struts的核心控制器StrutsPrepareAndExecuteFilter <?xml version="1. ...

  9. 表单中各种input汇总

    html表单 表单用于搜集不同类型的用户输入,表单由不同类型的标签组成,相关标签及属性用法如下: 1.<form>标签 定义整体的表单区域 action属性 定义表单数据提交地址 meth ...

  10. 赛码网算法: 上台阶 ( python3实现 、c实现)

    上台阶 题目描述 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?注:规定从一级到一级有0种走法. 输入输入数据首先包含一个整数n(1<=n<=1 ...