原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2120.html

题目传送门 - BZOJ2120

题意

  给定一个长度为 $n$ 的序列 $a$ ,有 $m$ 次操作,每次操作可能是如下两种类型之一:

  1. 询问区间不同值的个数。

  2. 修改一个 $a_i$ 。

  对于每一次询问,输出结果。

  $n,m\leq 10000,\ \ \ \ 1\leq a_i\leq10^6$

题解

  带修莫队裸题。

  打错一个变量找了20分钟。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=10005,M=1000005;
int n,m,Qcnt=0,Ocnt=0;
int c[N],dc[N],k[N];
int tax[M],tot=0;
struct Query{
int L,R,id,ans;
Query(){}
Query(int _L,int _R,int _id){
L=_L,R=_R,id=_id;
}
}Q[N];
struct Operation{
int x,v1,v2,id;
Operation(){}
Operation(int _x,int _v1,int _v2,int _id){
x=_x,v1=_v1,v2=_v2,id=_id;
}
}O[N];
bool cmp(Query a,Query b){
if (k[a.L]!=k[b.L])
return k[a.L]<k[b.L];
if (k[a.R]!=k[b.R])
return k[a.R]<k[b.R];
return a.id<b.id;
}
bool cmpid(Query a,Query b){
return a.id<b.id;
}
int L=1,R=0,t=0;
void update(int t){
int x=O[t].v1,y=O[t].v2,id=O[t].x;
if (c[id]!=x)
swap(x,y);
if (L<=id&&id<=R){
tot-=(--tax[x])==0;
tot+=(tax[y]++)==0;
}
c[id]=y;
}
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
scanf("%d",&c[i]),dc[i]=c[i];
for (int i=1;i<=m;i++){
char ch[2];
int x,y;
scanf("%s%d%d",ch,&x,&y);
if (ch[0]=='Q')
Q[++Qcnt]=Query(min(x,y),max(x,y),i);
else {
O[++Ocnt]=Operation(x,y,dc[x],i);
dc[x]=y;
}
}
for (int i=1;i<=n;i++)
k[i]=(i-1)/400;
sort(Q+1,Q+Qcnt+1,cmp);
memset(tax,0,sizeof tax);
O[0].id=0,O[Ocnt+1].id=m+1;
for (int i=1;i<=Qcnt;i++){
while (L<Q[i].L)
tot-=(--tax[c[L++]])==0;
while (L>Q[i].L)
tot+=(tax[c[--L]]++)==0;
while (R<Q[i].R)
tot+=(tax[c[++R]]++)==0;
while (R>Q[i].R)
tot-=(--tax[c[R--]])==0;
while (O[t+1].id<Q[i].id)
update(++t);
while (O[t].id>Q[i].id)
update(t--);
Q[i].ans=tot;
}
sort(Q+1,Q+Qcnt+1,cmpid);
for (int i=1;i<=Qcnt;i++)
printf("%d\n",Q[i].ans);
return 0;
}

  

BZOJ2120 数颜色 莫队 带修莫队的更多相关文章

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

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

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

    #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> ...

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

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

  4. BZOJ3052/UOJ#58 [wc2013]糖果公园 莫队 带修莫队 树上莫队

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3052.html 题目传送门 - BZOJ3052 题目传送门 - UOJ#58 题意 给定一棵树,有 ...

  5. [BZOJ2120] 数颜色 && [bzoj2453] 维护队列(莫队 || 分块)

    传送门 只有第一个,第二个权限题. 分块,然而wa,没看出来错在哪里,有时间再看. #include <cmath> #include <cstdio> #include &l ...

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

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

  7. BZOJ2120 数颜色 【带修莫队】

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

  8. 【BZOJ2120】数颜色(带修莫队)

    点此看题面 大致题意:告诉你\(n\)只蜡笔的颜色,有两种操作:第一种操作将第\(x\)只蜡笔颜色改成\(y\),第二种操作询问区间\([l,r]\)内有多少种颜色的蜡笔. 考虑普通莫队 这题目第一眼 ...

  9. 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】

    题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...

随机推荐

  1. 优秀员工的修炼——通往专家、管理之路

    (一)好员工的素质 好员工的类型有很多种,尝试着抽象出一个定义吧--好员工是那些主管分配其任务放心.同事喜欢与其共事.对自己工作负责.志在自我提升和价值实现的人.知识经济时代,好员工首先是做好自我管理 ...

  2. python创建udp服务端和客户端

    1.udp服务端server from socket import * from time import ctime HOST = '' PORT = 8888 BUFSIZ = 1024 ADDR ...

  3. oracle数据库链路和同义词

    Oracle数据库链路的建立和使用 先来一个例子: --创建数据库链路create   public   database link xaffdblink connect to zdcl identi ...

  4. CSS基础入门

    css基础语法 一.CSS格式 选择器{ 属性名:属性值; 属性名:属性值; } 选择器负责圈定范围,要修改的元素集合,花括号内的声明由属性名和属性值组成(key:value)的形式,用于设定具体样式 ...

  5. liunx tomcat 运行模式apr

    tomcat运行模式一共三种:bio.nio.apr 网上对这三种运行模式的解释外: bio运行模式:阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包) ...

  6. PID控制器开发笔记之四:梯形积分PID控制器的实现

    从微积分的基本原理看,积分的实现是在无限细分的情况下进行的矩形加和计算.但是在离散状态下,时间间隔已经足够大,矩形积分在某些时候显得精度要低了一些,于是梯形积分被提出来以提升积分精度. 1.梯形积分基 ...

  7. STM32L476应用开发之一:初次使用

    今天终于收到了期待已久的NUCLEO-F412ZG,感谢电子发烧友论坛!多年以来基本都是在STM32平台上做一些设计开发工作.但是低功耗的基本没用过,这次要做便携式设备才对这方面有所接触,正好这时电子 ...

  8. Confluence 6 恢复一个站点有关使用站点导出为备份的说明

    推荐使用生产备份策略.我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 ho ...

  9. Confluence 6 其他需要备份和恢复的地方

    XML 备份被描述用于在 Confluence 备份使用的其他方法,例如升级和移动服务器.使用上面描述的备份和恢复方法也适用这些地方. 我们的 upgrade guide 不要求使用一个 XML 备份 ...

  10. js数组的实例方法sort() 排序方法的运用,不再只是.sort()

    1, sort() 不传回调函数的话,默认按照字母顺序(字符编码)的顺序进行排序. 2, sort() 通过传回调函数来控制从小到大的排序还是从大到小的排序: var arr = [1,23,5,6, ...