Luogu P1903 [国家集训队]数颜色 / 维护队列 (带修莫队)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#define R(a,b,c) for( register int (a) = (b); (a) <= (c); ++(a))
#define nR(a,b,c) for( register int (a) = (b); (a) >= (c); --(a))
#define Max(a,b) ((a) >= (b) ? (a) : (b))
#define Min(a,b) ((a) <= (b) ? (a) : (b))
#define Iv inline void
#define Ii inline int
#define Il inline long long
#define ll long long
#define re register
struct ios{
template <typename ATP> inline ios& operator >> (ATP &x) {
x=0; int f=1; char c;
for (c=getchar(); c<'0' || c>'9'; c=getchar()) if(c == '-') f=-1;
while (c >= '0' && c <= '9') x = x * 10 + (c ^ '0'), c=getchar();
x*=f;
return *this;
}
template <typename ATP> inline ios& operator << (ATP x) {
int digit = 0; char sch[67];
if( x == 0) { putchar ('0'); return *this;}
if (x < 0) { x = -x, putchar ('-');}
while (x) sch[++digit]=x % 10 ^ '0', x /= 10;
for (register int i=digit; i; --i) putchar (sch[i]);
return *this;
}
} io;
using namespace std;
//#define InputAndOutput_Bug_Test
#ifdef InputAndOutput_Bug_Test
int main(){
while (1) {
long long x;
io >> x;
cout << x << endl;
io << x;
putchar ('\n');
}
}
#endif
const int N=50007;
int col[N];
int TotColor[1000007],NowColor[N];
int block[N];
int ans[N],Ans;
int l=1,r;
struct Query{
int l,r,tim,id;
bool operator< (const Query &b)const{
if(block[l]==block[b.l]){
if(block[r]==block[b.r])
return tim<b.tim;
else
return r<b.r;
}
else
return l<b.l;
}
}q[N];
struct Change{
int pos,New,Old;
}c[N];
Iv Modify(int workColor,int d){
TotColor[workColor]+=d;
if(d>0)
Ans+=(TotColor[workColor]==1);
if(d<0)
Ans-=(TotColor[workColor]==0);
}
Iv Going(int pos,int workColor){
if(l<=pos&&pos<=r){
Modify(workColor,1),
Modify(col[pos],-1);
}
col[pos]=workColor;
}
int main(){
int n,m; io>>n>>m;
int unit=pow(n,0.666666);
R(i,1,n){
io>>col[i],
NowColor[i]=col[i],
block[i]=(i-1)/unit+1;
}
int tot=0,Time=0;
R(i,1,m){
char opt;
for(opt=getchar();opt!='Q'&&opt!='R';opt=getchar());
if(opt=='Q'){
int l,r;
io>>l>>r,
q[++tot]=(Query){l,r,Time,tot};
}
else{
int pos,newColor;
io>>pos>>newColor,
c[++Time]=(Change){pos,newColor,NowColor[pos]},
NowColor[pos]=newColor;
}
}
sort(q+1,q+tot+1);
Time=0;
R(i,1,tot){
while(Time<q[i].tim) Going(c[Time+1].pos,c[Time+1].New),++Time;
while(Time>q[i].tim) Going(c[Time].pos,c[Time].Old),--Time;
while(l<q[i].l) Modify(col[l],-1),++l;
while(l>q[i].l) Modify(col[l-1],1),--l;
while(r<q[i].r) Modify(col[r+1],1),++r;
while(r>q[i].r) Modify(col[r],-1),--r;
ans[q[i].id]=Ans;
}
R(i,1,tot){
io<<ans[i],
putchar('\n');
}
return 0;
}
Luogu P1903 [国家集训队]数颜色 / 维护队列 (带修莫队)的更多相关文章
- 洛谷 P1903 [国家集训队]数颜色 / 维护队列 带修莫队
题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: \(1\). \(Q\) \(L\) \(R\)代表询问你从第\(L\) ...
- P1903 [国家集训队]数颜色 / 维护队列 带修改莫队
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
- luogu 1903 [国家集训队]数颜色 / 维护队列 带修改莫队
十分玄学的数据结构~ code: #include <bits/stdc++.h> #define N 1000006 #define setIO(s) freopen(s".i ...
- P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队
\(\color{#0066ff}{ 题目描述 }\) 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支 ...
- LUOGU P1903 [国家集训队]数颜色 / 维护队列
传送门 解题思路 带修莫队,第一次写,其实和普通莫队差不多,就是多了个时间轴,块分n^(2/3)最优,时间复杂度O(n^(5/3)). #include<iostream> #includ ...
- bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)
P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...
- P1903 [国家集训队]数颜色 / 维护队列
思路 带修莫队的板子 带修莫队只需要多维护一个时间的指针即可,记录一下每个询问在第几次修改之后,再回退或者前进几个修改操作 排序的时候如果a.l和b.l在一个块里,就看r,如果a.r和b.r在一个块里 ...
- P1903 [国家集训队]数颜色 / 维护队列(带修莫队)
题目描述: 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. ...
- 洛谷P1903 [国家集训队]数颜色 / 维护队列 ( 带 修 )
题意:有两种操作: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 对每个1操作 输出答案: 带修莫队 模板题 (加 ...
随机推荐
- 一起看 I/O | Flutter 3 更新详解
作者 / Kevin Jamaul Chisholm, Technical Program Manager for Dart and Flutter at Google 又到了 Flutter 稳定版 ...
- 【clickhouse专栏】单机版的安装与验证
<clickhouse专栏>第三节内容,先安装一个单机版的clickhouse,是后续学习多副本或者分布式集群安装的基础内容.但基本的clickhouse是不依赖于zookeeper的,只 ...
- DevOps落地实践点滴和踩坑记录-(1)
记录初衷 本人一直在从事企业内DevOps落地实践的工作,走了不少弯路,也努力在想办法解决面临的问题,期间也经历过不少人和事情,最近突然有想法把经历过的,不管好的不好的都记录下来,分享给和我一样的一线 ...
- Node.js精进(1)——模块化
模块化是一种将软件功能抽离成独立.可交互的软件设计技术,能促进大型应用程序和系统的构建. Node.js内置了两种模块系统,分别是默认的CommonJS模块和浏览器所支持的ECMAScript模块. ...
- Zookeeper分布式锁实现Curator十一问
前面我们剖析了Redisson的源码,主要分析了Redisson实现Redis分布式锁的15问,理清了Redisson是如何实现的分布式锁和一些其它的特性.这篇文章就来接着剖析Zookeeper分布式 ...
- SAP 实例 13 Random Grouping with LOOP
REPORT demo_loop_group_by_random. CLASS demo DEFINITION. PUBLIC SECTION. CLASS-METHODS: main, class_ ...
- k8s动态存储管理GlusterFS
1. 在node上安装Gluster客户端(Heketi要求GlusterFS集群至少有三个节点) 删除master标签 kubectl taint nodes --all node-role.kub ...
- Redis docker 主从模式与哨兵sentinel
更多技术记录,请参考软件开发 | 编程 | RustFisher 为实现redis的高可用,我们采用主从模式加哨兵的方法. 一主二从三哨兵,共启动6个redis容器.本文示例在同一个服务器上进行操作. ...
- Tomcat深入浅出(一)
一.Tomcat简介 我们下载好Tomcat后需要配置一下Java环境:如果打开出现闪退得情况,首先是jdk 同时配置JRE_HOME Tomcat的一些关键目录: /bin:存放用于启动及关闭的文件 ...
- AMS1117降压电路
AMS1117芯片为正向低压差稳压器,内部集成过热保护和限流电路,其固定输出版本电压可为1.5V.1.8V.2.5V.2.85V.3.0V.3.3V.5.0V,设计采用3.3V输出即ASM1117-3 ...