题目链接:

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. php操作mysql使用的socket

    在本地安装了php,安装了mysql,mysql-server.mysql服务也启动了. php扩展中也有mysql > php -m | grep mysql 然而执行mysql_connec ...

  2. Luogu3793 由乃救爷爷 分块、ST表

    传送门 因为昨天写暴力写挂在UOJ上用快排惨遭卡常,所以今天准备写一个卡常题消遣消遣,然后时间又垫底了QAQ 这道题显然需要支持一个\(O(N)\)预处理\(O(1)\)查询的ST表,显然普通的ST表 ...

  3. React-使用imutable.js来管理store中的数据

    reducer.js中store的数据是不能改变的,用原始的方法要手动的保证store不被修改,存在风险.imutable.js可以生成一个不可改变的对象,可以避免掉自己不小心修改掉store的情况. ...

  4. Redis对象占用内存分析

    当你往Redis中插入了一系统对象,如何分析这些对象的占用情况? 1.我们可以在Redis的控制台使用info命令来查看各项指标,其中有一项是Memory,可以通过存储前后的used_memory差异 ...

  5. Linux 小记 — Ubuntu 自动化配置

    前言 工欲善其事,必先利其器.经过多次的重复配置 ubuntu 开发坏境,我终于决定花点时间总结一下,并将其写成一个自动化配置脚本.服务器实例:ubuntu 16.04,技术栈:shell,pytho ...

  6. LVM : 简介

    在对磁盘分区的大小进行规划时,往往不能确定这个分区要使用的空间的大小.而使用 fdisk.gdisk 等工具对磁盘分区后,每个分区的大小就固定了.如果分区设置的过大,就白白浪费了磁盘空间:如果分区设置 ...

  7. 【亲测有效】Kali Linux无法安装网易云音乐的解决方案

    问题描述 由于 Kali Linux 的内核是基于 Debian 的,我们在安装网易云音乐的时候更偏向于选择安装网易云音乐 v1.1.0 deepin15(64位) 的包,可是我发现在安装过程中,无法 ...

  8. CAD2020下载安装AutoCAD2020中文版下载地址+安装教程

    AutoCAD2020中文版为目前最新软件版本,我第一时间拿到软件进行安装测试,确保软件正常安装且各项功能正常可以使用,立刻拿出来分享,想用最新版本的话,抓紧下载使用吧: 我把我用的安装包贡献给你下载 ...

  9. last individual reading task 12061183叶露婷

    http://www.cnblogs.com/yltyy/p/4025426.html 1.Different people deserve different tasks; Once team ro ...

  10. <构建之法>第三10、11、12章

    第十章 典型用户和场景 问题:如何更准确知道用户的需求是什么,设计出满足用户的软件? 第十一章 软件设计与实现 问题:软件设计过程中,如何管理设计变更? 第十二章 用户体验 问题:在何时开始设计用户体 ...