题目链接:

https://www.lydsy.com/JudgeOnline/problem.php?id=2120

题意:两种操作:Q 询问区间  l - r  内颜色的种类 ,R 单点修改

思路:

带修莫队与普通莫队不同之处就是,带修莫队可以支持修改操作,我们可以再维护一维来表示操作的时间,那么离线处理询问时,我们就需要维护 l,r,t,三根指针,同时因为是三根指针

块的大小分成 n的2/3次方,其他地方和普通莫队维护是一样的,只是多维护了一维操作时间,可能看上去会绕一点。

实现代码:

#include<bits/stdc++.h>
using namespace std;
const int M = 1e4 + ; struct node{
int l,r,t,id;
node(int l=,int r=,int t=,int id=):l(l),r(r),t(t),id(id){}
}q[M]; struct node1{
int pos,now,old;
node1(int pos=,int now=,int old=):pos(pos),now(now),old(old){}
}c[M]; int n,m,block,l,r,num[M],a[M],now[M],flag[M*],ans;
//排序优先度如果l,r都在一个块中,那么优先选择t小的
bool cmp(node a,node b){
if(a.l/block != b.l/block){
if(a.r/block != b.r/block){
return a.t < b.t;
}
return a.r < b.r;
}
return a.l < b.l;
} void add(int col,int val){
flag[col] += val;
if(val > ) ans += (flag[col] == );
else if(val < ) ans -= (flag[col]==);
} void solve(int pos,int col){
if(pos >= l&&pos <= r) add(col,),add(a[pos],-);
a[pos] = col;
} int main()
{
scanf("%d%d",&n,&m);
block = (int)pow(n,2.0/3.0);
for(int i = ;i <= n;i ++){
scanf("%d",&a[i]);
now[i] = a[i]; //now[i] i点现在的颜色
}
int k = ;
int cnt = ; ans = ;
for(int i = ;i < m;i ++){
char op[];
int x,y;
scanf("%s%d%d",&op,&x,&y);
if(op[] == 'Q'){
//将询问的区间左右节点,在第k次修改之后,第cnt个询问等信息存到结构体q中
q[++cnt] = node(x,y,k,cnt);
}
else {
//将第k次修改的点的左边,要修改的颜色,这个点之前的颜色,存到结构体里
c[++k] = node1(x,y,now[x]);
now[x] = y; //x点现在的颜色变为y
}
}
sort(q+,q+cnt+,cmp);
l = ; r = ;
int tim = ;
for(int i = ;i <= cnt;i ++){
while(tim < q[i].t) solve(c[tim+].pos,c[tim+].now),tim++;
while(tim > q[i].t) solve(c[tim].pos,c[tim].old),tim--;
while(q[i].l < l) add(a[l-],),l--;
while(q[i].l > l) add(a[l],-),l++;
while(q[i].r < r) add(a[r],-),r--;
while(q[i].r > r) add(a[r+],),r++;
num[q[i].id] = ans;
}
for(int i = ;i <= cnt;i ++)
printf("%d\n",num[i]);
return ;
}

bzoj 2120 数颜色 (带修莫队)的更多相关文章

  1. BZOJ 2120 数颜色 (带修莫队)

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 6367  Solved: 2537[Submit][Status][Discuss] ...

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

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

  3. bzoj2120 数颜色——带修莫队

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2120 带修改的莫队: 用结构体存下修改和询问,排好序保证时间后就全局移动修改即可: 参考了T ...

  4. 【bzoj2120】数颜色 带修莫队

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

  5. bzoj2120: 数颜色 带修莫队

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

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

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

  7. NOI模拟 颜色 - 带修莫队/树套树

    题意: 一个颜色序列,\(a_1, a_2, ...a_i\)表示第i个的颜色,给出每种颜色的美丽度\(w_i\),定义一段颜色的美丽值为该段颜色的美丽值之和(重复的只计算一次),每次都会修改某个位置 ...

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

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

  9. BZOJ 2120: 数颜色 带修改的莫队算法 树状数组套主席树

    https://www.lydsy.com/JudgeOnline/problem.php?id=2120 标题里是两种不同的解法. 带修改的莫队和普通莫队比多了个修改操作,影响不大,但是注意一下细节 ...

随机推荐

  1. c语言第三例

    标准的输入输出函数: putchar(输出字符) getchar(获取输入字符) printf(格式输出) scanf(格式输入) puts(输出字符串) gets(获取输入字符串) #include ...

  2. 重装系统之U盘设为第一启动项

    做好启动盘之后(教程:重装系统之制作U盘启动盘),接下来该设置U盘为第一启动项. 以我的电脑(华硕X450JN)为例,开机不停地按f2,进入系统引导界面. 其它牌子的电脑可以在开机时候试试esc,f1 ...

  3. 用c#开发微信 系列汇总 - z

    http://www.cnblogs.com/txw1958/ http://www.cnblogs.com/fengwenit/p/4505062.html

  4. 一个可爱 & 小清新的加载等待Android控件

    https://github.com/Carson-Ho/Kawaii_LoadingView

  5. 转 edtools

     1.下载工具包:edtools.rar ,解压后放到磁盘的何意一个目录,如D:\edTools. 2.打开ED,打开“工具”-“配置用户工具”,在弹出的对象框中,在“组和工具项目”下拉框中选择一个工 ...

  6. Python从菜鸟到高手(3):声明变量

    变量(variable)是Python语言中一个非常重要的概念.变量的主要作用就是为Python程序中的某个值起一个名字.类似于"张三"."李四"." ...

  7. item 6: 当auto推导出一个不想要的类型时,使用显式类型初始化的语法

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 Item 5解释了比起显式指定类型,使用auto来 ...

  8. Bash : 冒泡排序

    冒泡排序是非常基础的排序算法,本文我们看看在 Bash 脚本中如何写冒泡排序.本文的演示环境为 ubuntu 16.04. 冒泡排序的简要描述如下: 通过连续的比较对数组中的元素进行排序 比较两个相邻 ...

  9. Windows 10 中 VMware 要求禁用 Device Guard 问题

    今天在打开虚拟机的时候,突然出现下面这个错误.网上给了很多教程,基本上都是禁用 Device Guard 和关闭 Hyper-v,博主按照其方法操作,依旧出现下面错误.后来经过不懈努力,终于找到解决办 ...

  10. centos7下安装php+memcached简单记录

    1)centos7下安装php 需要再添加一个yum源来安装php-fpm,可以使用webtatic(这个yum源对国内网络来说恐怕有些慢,当然你也可以选择其它的yum源) [root@nextclo ...