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 ...
随机推荐
- Python学习---Django拾遗180328
Django之生命周期 前台发送URL请求到Django的中间件进行内容校验,完成校验后到达路由映射文件url.py,然后调用视图函数views.py里面的函数进行内容处理[ 1.操作数据库进行数据读 ...
- CSS学习摘要-布局
注:全文摘自MDN-介绍CSS布局 CSS页面布局技术允许我们拾取网页中的元素,并且控制它们相对正常布局流.周边元素.父容器或者主视口/窗口的位置.在这个模块中将涉及更多关于页面布局技术的细节: 浮动 ...
- (z转)基于CPU的Bank BRDF经验模型,实现各向异性光照效果!
摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文 名“GPU编程与CG语言之阳春白雪下里巴人” BRDF 光照模型 10.2.1 什么 ...
- MVC中使用EF的技巧集(一)
一.建好数据库后,向项目中添加数据模型. 1.右键点击“Models” 文件夹,选择“添加”,再选择“添加新项”. 2.在“添加新项”窗口,选择左边的“数据”,然后再在右边选择“ADO.NET 实体数 ...
- 面向对象程序设计_tesk1_寒假伊始
大一下学期的自我目标(要求包含对大一上学期的总结.对面向对象课程完成后学习到的能力的预期,对面向对象课程的期望.对编程和专业能力的愿景规划) 在大学的第一个学期,相信很多人都是在得过且过度过,我也不例 ...
- 如何处理高并发情况下的DB插入
1. 我们需要接收一个外部的订单,而这个订单号是不允许重复的 2. 数据库对外部订单号没有做唯一性约束 3. 外部经常插入相同的订单,对于已经存在的订单则拒绝处理 对于这个需求,很简单我们会用下 ...
- Jmeter入门3 http请求—content-type与参数
本文讲三种content-type以及在Jmeter中对应的参数输入方式 第一部分:目前工作中涉及到的content-type 有三种: content-type:在Request Headers里, ...
- git使用,在ubuntu中
#安装sudo apt install git要先到github官网建一个账号. #配置 你的github git config --global user.name "fanbrightu ...
- 20165302 ch02 课下作业
20165302 ch02 课下作业 作业内容 补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 完成教材 p97 2.96 2.97,要有完备的测试 发一篇相关内容的博客, ...
- 插件式程序开发及其应用(C#)
1. 定义 所谓“插件模型”,指应用程序由一些动态的独立模块构成,每个模块均具有一个或多个服务,并满足一定的插件协议,能够借助主程序实现主程序-插件:插件-插件之间的通讯. 应用该模型的系统,具有以 ...