[BZOJ2120]数颜色(莫队算法)
Description
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。为了满足墨墨的要求,你知道你需要干什么了吗?
带修改莫队,给每个询问加一个权值时间tim,询问的时候让时光回溯
Code
#include <cstdio>
#include <algorithm>
#include <cmath>
#define N 10010
using namespace std; int n,m,col[N],now[N],bl[N],Tim,cnt,Ans[N],sum,Scol[N*100],l,r;
struct change{
int p,v,pre;
change(){}
change(int a,int b,int c):p(a),v(b),pre(c){}
}c[N/10];
struct query{
int tim,l,r,id;
query(){}
query(int a,int b,int c,int d):l(a),r(b),tim(c),id(d){}
friend bool operator <(query a,query b){
return (bl[a.l]==bl[b.l])?(a.r==b.r?a.tim<b.tim:a.r<b.r):a.l<b.l;
}
}q[N]; inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
} void upd(int x,int d){
Scol[x]+=d;
if(d>0) sum+=(Scol[x]==1);
else sum-=(Scol[x]==0);
}
void go(int x,int d){
if(l<=x&&x<=r) upd(d,1),upd(col[x],-1);
col[x]=d;
} int main(){
n=read(),m=read();int blo=sqrt(n);
for(int i=1;i<=n;++i) col[i]=now[i]=read(),bl[i]=i/blo+1;
for(int i=1;i<=m;++i){
char ch;for(ch=getchar();ch!='Q'&&ch!='R';ch=getchar());
int x=read(),y=read();
if(ch=='Q') q[++cnt]=query(x,y,Tim,cnt);
else c[++Tim]=change(x,y,now[x]),now[x]=y;
}
sort(q+1,q+cnt+1);
for(int i=1,t=0;i<=cnt;++i){
for(;t<q[i].tim;t++) go(c[t+1].p,c[t+1].v);
for(;t>q[i].tim;t--) go(c[t].p,c[t].pre);
for(;l<q[i].l;l++) upd(col[l],-1);
for(;l>q[i].l;l--) upd(col[l-1],1);
for(;r<q[i].r;r++) upd(col[r+1],1);
for(;r>q[i].r;r--) upd(col[r],-1);
Ans[q[i].id]=sum;
}
for(int i=1;i<=cnt;printf("%d\n",Ans[i++]));
return 0;
}
[BZOJ2120]数颜色(莫队算法)的更多相关文章
- bzoj2120 数颜色 莫队 带修改
[bzoj2120]数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- bzoj2120: 数颜色 [莫队][分块]
Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...
- BZOJ2120 数颜色 莫队 带修莫队
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2120.html 题目传送门 - BZOJ2120 题意 给定一个长度为 $n$ 的序列 $a$ ,有 ...
- BZOJ2120 数颜色(带修改的莫队算法)
Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...
- BZOJ2120 数颜色 【带修莫队】
BZOJ2120 数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到 ...
- 牛客练习赛47 DongDong数颜色 (莫队算法)
链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 5242 ...
- BZOJ2120数颜色(带修改莫队)
莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...
- 【BZOJ】2120: 数颜色 带修改的莫队算法
[题意]给定n个数字,m次操作,每次询问区间不同数字的个数,或修改某个位置的数字.n,m<=10^4,ai<=10^6. [算法]带修改的莫队算法 [题解]对于询问(x,y,t),其中t是 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
随机推荐
- lnmp架构-负载均衡
一.几个基本概念 1.pv 值 pv 值(page views):页面的浏览量 概念:一个网站的所有页面,在一天内,被浏览的总次数.(大型网站通常是上千万的级别) 2.uv值 uv值(unique v ...
- 微软RPC技术学习小结
RPC,即Remote Procedure Call,远程过程调用,是进程间通信(IPC, Inter Process Communication)技术的一种.由于这项技术在自己所在项目(Window ...
- Linux vi 常用指令总结
本文根据笔者,日常常用的linux下的vi指令,进行说明 一.基本操作 1.vi 文件名 进入vi 的“命令行模式”,此模式无法编辑,只能查看 需要按下键盘的“i”键,进入“编辑模式”,才能进行文件的 ...
- Cygwin Run in the Windows(Simulation of UNIX)
Preface Environment Cygwin Run in the Windows(Simulation of UNIX) Resource Cygwin Install:http://cyg ...
- frame、window和dialog区别
属性 Window Frame Dialog 模式化 不是 不是 不是(可设置) 可调大小 不可 可 可 标题栏 无 有 有 边界 无 有 有 标题 无 有 有 菜单栏 无 有 无 焦点管理器 有 有 ...
- InnoDB多版本(MVCC)实现简要分析
转载自:http://hedengcheng.com/?p=148 基本知识 假设对于多版本(MVCC)的基础知识,有所了解.InnoDB为了实现多版本的一致读,采用的是基于回滚段的协议. 行结构 I ...
- selenium 打开浏览器报错java.lang.NoSuchMethodError: org.openqa.selenium.chrome.ChromeOptions.addArguments([Ljava/lang/String;)
java.lang.NoSuchMethodError: org.openqa.selenium.chrome.ChromeOptions.addArguments([Ljava/lang/Strin ...
- 模拟停车POJ(3505)
题目链接:http://poj.org/problem?id=3505 解题报告: #include <stdio.h> #include <iostream> #includ ...
- IntelliJ IDEA环境使用
转:https://blog.csdn.net/zwj1030711290/article/details/80673482 https://blog.csdn.net/zrc199021/artic ...
- centos6 编译安装gcc4.8.2
12 wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.2/gcc-4.8.2.tar.gz 13 rm -r -f g ...