P1903 [国家集训队]数颜色 带修改莫队板子
大概就是要多加一维time
然后按照(l的块,r的块,time)为关键字排序
转移区间修改还是按照莫队的方式(每个修改要记修改前后的状态)
然后玄学dalao告诉窝块大小设为\(O(n^{\frac{2}{3}})\)最优

// It is made by XZZ
#include<cstdio>
#include<algorithm>
#include<cmath>
#define il inline
#define rg register
#define vd void
#define sta static
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int maxn=10010;
int A[maxn];
int p[maxn],pa[maxn],pb[maxn];
struct ques{int l,r,id,t;}Q[maxn];
int ans[maxn];
int block[maxn];
bool operator <(const ques&a,const ques&b){
if(block[a.l]!=block[b.l])return block[a.l]<block[b.l];
if(block[a.r]!=block[b.r])return block[a.r]<block[b.r];
return a.t<b.t;
}
int tot[1000010],nowans;
il vd fuck(int a,int b){
if(tot[a]==1&&b==-1)--nowans;
if(tot[a]==0&&b==1)++nowans;
tot[a]+=b;
}
int main(){
#ifdef xzz
freopen("1903.in","r",stdin);
freopen("1903.out","w",stdout);
#endif
int n=gi(),m=gi(),k=0,q=0,blo=pow(n,0.67),a,b;
char o[2];
for(rg int i=1;i<=n;++i)A[i]=gi();
for(rg int i=1;i<=n;++i)block[i]=i/blo;
for(rg int i=1;i<=m;++i){
scanf("%s",o),a=gi(),b=gi();
if(o[0]=='Q')++q,Q[q].l=a,Q[q].r=b,Q[q].id=q,Q[q].t=k;
else if(o[0]=='R')++k,p[k]=a,pa[k]=A[a],A[a]=pb[k]=b;
}
std::sort(Q+1,Q+q+1);
int L=1,R=1,T=k;
tot[A[1]]=1;nowans=1;
for(rg int i=1;i<=q;++i){
while(T<Q[i].t){
++T,A[p[T]]=pb[T];
if(L<=p[T]&&p[T]<=R)fuck(pa[T],-1),fuck(pb[T],1);
}
while(T>Q[i].t){
A[p[T]]=pa[T];
if(L<=p[T]&&p[T]<=R)fuck(pb[T],-1),fuck(pa[T],1);
--T;
}
while(L>Q[i].l)--L,fuck(A[L],1);
while(R>Q[i].r)fuck(A[R],-1),--R;
while(R<Q[i].r)++R,fuck(A[R],1);
while(L<Q[i].l)fuck(A[L],-1),++L;
ans[Q[i].id]=nowans;
}
for(rg int i=1;i<=q;++i)printf("%d\n",ans[i]);
return 0;
}
P1903 [国家集训队]数颜色 带修改莫队板子的更多相关文章
- BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]
BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...
- P1903 [国家集训队]数颜色 (带修改莫队)
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
- bzoj 2120 数颜色 带修改莫队
带修改莫队,每次查询前调整修改 #include<cstdio> #include<iostream> #include<cstring> #include< ...
- BZOJ2120数颜色(带修改莫队)
莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...
- [国家集训队][bzoj2120] 数颜色 [带修改莫队]
题面: 传送门 思路: 这道题和SDOI2009的HH的项链很像,只是多了一个修改 模板套上去呀 莫队学习请戳这里:莫队 Code: #include<iostream> #include ...
- COGS.1901.[模板][国家集训队2011]数颜色(带修改莫队)
题目链接 COGS BZOJ2120 洛谷P1903 /* Add和Subd函数中的vis不能直接设为=1或=0 比如 l=1,r=0 -> l=3,r=5 时,[1,5]的vis标记全都是1 ...
- bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)
P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...
- 洛谷 P1903 [国家集训队]数颜色 解题报告
P1903 [国家集训队]数颜色 题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1.Q L R代表询问你从第\(L\) ...
- P1903 [国家集训队]数颜色 / 维护队列 带修改莫队
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
随机推荐
- 初始Flask
一.Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来) Flask 主要特点小而轻,原生组件几乎为0, 三方提供的组件请参考Django 非常全面,属于短小精悍型框架 Flask是一个基于P ...
- [翻译] MotionBlur
MotionBlur https://github.com/fastred/MotionBlur MotionBlur allows you to add motion blur effect to ...
- python3 django1.10 使用mysql服务器
python3中使用mysql报错ModuleNotFoundError: No module named 'MySQLdb' 原因是:在python2.x中用mysqldb,但是在python3.x ...
- [2018HN省队集训D5T1] 沼泽地marshland
[2018HN省队集训D5T1] 沼泽地marshland 题意 给定一张 \(n\times n\) 的棋盘, 对于位置 \((x,y)\), 若 \(x+y\) 为奇数则可能有一个正权值. 你可以 ...
- performSelector 多参调用的实现方案
1.nsinvocation封装: 2.msg_send封装: 第二种方案是系统的原生封装.
- BZOJ3160:万径人踪灭(FFT,Manacher)
Solution $ans=$回文子序列$-$回文子串的数目. 后者可以用$manacher$直接求. 前者设$f[i]$表示以$i$为中心的对称的字母对数. 那么回文子序列的数量也就是$\sum_{ ...
- 【洛谷】【lca+树上差分】P3258 [JLOI2014]松鼠的新家
[题目描述:] 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n(2 ≤ n ≤ 300000)个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真 ...
- virtualbox+vagrant学习-3-Vagrant Share-1-简介
Vagrant Share 通过 ngrok 内网穿透功能实现让全世界人可以访问虚拟机的服务 Vagrant Share允许你与世界上的任何人共享您的Vagrant环境,几乎支持你在任何网络环境中使用 ...
- kaggle _Titanic: Machine Learning from Disaster
A Data Science Framework: To Achieve 99% Accuracy https://www.kaggle.com/ldfreeman3/a-data-science-f ...
- 拥抱.NET Core系列:MemoryCache 缓存过期 (转载)
阅读目录 MSCache项目 MSCache提供的过期方式 绝对时间到期 滑动时间到期 自定义过期策略 过期策略组合拳 缓存过期回调 写在最后 在上一篇”拥抱.NET Core系列:MemoryCac ...