维护队列 bzoj-2453

题目大意:给定一个n个数序列,支持查询区间数的种类数,单点修改。不强制在线。

注释:$1\le n,m\le 10^5$。


想法

带修改莫队裸题。

如果没有修改操作的话,我们就正常按照莫队一样左右移动区间即可。

有了修改操作的话,我们把块变成$n^{\frac{2}{3}}$,关键字变成:左端点所在块、右端点所在块和时间戳。

然后暴力就行了。

Code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=10003;
struct Query{int l,r,Tim,ID;}q[N];
struct Change{int pos,New,Old;}c[N];
int n,m,s[N],color[N*100],t,Time,now[N],unit,Be[N],ans[N],Ans,l=1,r,T;
inline bool cmp(const Query &a,const Query &b)
{
return Be[a.l]==Be[b.l]?(Be[a.r]==Be[b.r]?a.Tim<b.Tim:a.r<b.r):a.l<b.l;
}
inline void revise(int x,int d) {color[x]+=d; if(d>0) Ans+=color[x]==1; if(d<0) Ans-=color[x]==0;}
inline void going(int x,int d) {if(l<=x&&x<=r) revise(d,1),revise(s[x],-1); s[x]=d;}
int main()
{
scanf("%d%d",&n,&m); unit=pow(n,0.666666);
for(int i=1;i<=n;i++) scanf("%d",&s[i]),now[i]=s[i],Be[i]=i/unit+1;
for(int i=1;i<=m;i++)
{
char s[10]; int x,y;
scanf("%s%d%d",s+1,&x,&y);
if(s[1]=='Q') q[++t]=(Query){x,y,Time,t};
if(s[1]=='R') {c[++Time]=(Change){x,y,now[x]},now[x]=y;}
}
// printf("Fuck %d\n",t);
sort(q+1,q+t+1,cmp);
for(int i=1;i<=t;i++)
{
while(T<q[i].Tim) going(c[T+1].pos,c[T+1].New),T++;
while(T>q[i].Tim) going(c[T].pos,c[T].Old),T--;
while(l<q[i].l) revise(s[l],-1),l++;
while(l>q[i].l) revise(s[l-1],1),l--;
while(r<q[i].r) revise(s[r+1],1),r++;
while(r>q[i].r) revise(s[r],-1),r--;
ans[q[i].ID]=Ans;
}
for(int i=1;i<=t;i++) printf("%d\n",ans[i]);
return 0;
}

小结:莫队其实就是暴力啊。

[bzoj2453]维护队列_带修改莫队的更多相关文章

  1. BZOJ.2453.维护队列([模板]带修改莫队)

    题目链接 带修改莫队: 普通莫队的扩展,依旧从[l,r,t]怎么转移到[l+1,r,t],[l,r+1,t],[l,r,t+1]去考虑 对于当前所在的区间维护一个vis[l~r]=1,在修改值时根据是 ...

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

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

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

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

  4. 算法复习——带修改莫队(bzoj2453)

    题目: Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A ...

  5. BZOJ2120&2453数颜色——线段树套平衡树(treap)+set/带修改莫队

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

  6. 【BZOJ】4129: Haruna’s Breakfast 树分块+带修改莫队算法

    [题意]给定n个节点的树,每个节点有一个数字ai,m次操作:修改一个节点的数字,或询问一条树链的数字集合的mex值.n,m<=5*10^4,0<=ai<=10^9. [算法]树分块+ ...

  7. 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)

    莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...

  8. 【Luogu】P1903数颜色(带修改莫队)

    题目链接 带修改莫队模板. 加一个变量记录现在是第几次修改,看看当前枚举的询问是第几次修改,改少了就改过去,改多了就改回来. 话说我栈用成队列了能过样例?!!!! 从此深信一句话:样例是出题人精心设计 ...

  9. Tulip Festival(线段树+二分+CDQ+带修改莫队+树套树)

    题目链接 传送门 线段树\(+\)二分思路 思路 比赛看到这题时感觉是一棵线段树\(+\)主席树,然后因为不会带修改主席树就放弃了,最后发现还卡了树套树. 由于本题数据保证序列中相同的数字不会超过20 ...

随机推荐

  1. Safari兼容之new Date()格式问题

    safari浏览器: 故: Safari浏览器应该用‘2017/10/23’来代替‘2017-10-23’ 谷歌浏览器: 谷歌浏览器两种格式都支持

  2. vscode增加xdebug扩展

    首先确保php增加了xdebug扩展,方法很多,可参考 https://www.cnblogs.com/wanghaokun/p/9084188.html.可通过phpinfo()查看是否已开启支持. ...

  3. flutter 实现圆角头像的2种方法

    圆角头像在开发中应用太普遍了,我总结了2种实现方法,分享给大家 方法一: 使用Container组件的decoration可以实现 Container( width: 40, height: 40, ...

  4. ie11 突然不能加载外部css 很神奇 头部改为 <!DOCTYPE> <html>

    <!DOCTYPE html> <html> 改为 <!DOCTYPE> <html>   OK了

  5. PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (一) -- 安装 AMQP 扩展和 Direct Exchange 模式

    Windows 安装 amqp 扩展 RabbitMQ 是基于 amqp(高级消息队列协议) 协议的.使用 RabbitMQ 前必须为 PHP 安装相应的 amqp 扩展. 下载相应版本的 amqp ...

  6. 第2节 mapreduce深入学习:4, 5

    第2节 mapreduce深入学习:4.mapreduce的序列化以及自定义排序 序列化(Serialization)是指把结构化对象转化为字节流. 反序列化(Deserialization)是序列化 ...

  7. Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用

    近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限, ...

  8. Linux 内核框架图

  9. log4j动态文件名

    在项目中,对log的输出有多种多样的要求,下面具体分析一下动态log文件名输出的. 一,按照用户ID来生成log,这种情况,可以根据每个用户ID来动态生成logger. 代码如下: import or ...

  10. 动态 SQL(1)

    使用动态 SQL 完成多条件查询 动态 SQL 是 MyBatis 的一个强大的特性.在使用 JDBC 操作数据时,如果查询条件特别多,将条件串联成 SQL 字符串是一件痛苦的事情,通常的解决方法是写 ...