LUOGU P1903 [国家集训队]数颜色 / 维护队列
解题思路
带修莫队,第一次写,其实和普通莫队差不多,就是多了个时间轴,块分n^(2/3)最优,时间复杂度O(n^(5/3))。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm> using namespace std;
const int MAXN = ; inline int rd(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?:;ch=getchar();}
while(isdigit(ch)) {x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f?x:-x;
} struct Data{
int id,l,r,t;
}q[MAXN]; struct Upd{
int pos,val;
}c[MAXN]; int n,m,bl[MAXN],siz,ans[MAXN],a[MAXN];
int Qcnt,Ccnt,cnt[]; inline bool cmp(Data A,Data B){
if(bl[A.l]!=bl[B.l]) return bl[A.l]<bl[B.l];
if(bl[A.r]!=bl[B.r]) return bl[A.r]<bl[B.r];
return A.t<B.t;
} int main(){
n=rd(),m=rd();int x,y;char s;siz=pow(n,(double)/);
for(int i=;i<=n;i++) a[i]=rd(),bl[i]=i/siz+;
for(int i=;i<=m;i++){
cin>>s;x=rd(),y=rd();
if(s=='Q')
q[++Qcnt].l=x,q[Qcnt].r=y,q[Qcnt].id=Qcnt,q[Qcnt].t=Ccnt;
else
c[++Ccnt].pos=x,c[Ccnt].val=y;
}
sort(q+,q++Qcnt,cmp);
int L=,R=,now=,Ans=;
for(int i=;i<=Qcnt;i++){
while(L<q[i].l) {if(!(--cnt[a[L]])) Ans--;L++;}
while(L>q[i].l) {L--;if(++cnt[a[L]]==) Ans++;}
while(R<q[i].r) {R++;if(++cnt[a[R]]==) Ans++;}
while(R>q[i].r) {if(!(--cnt[a[R]])) Ans--;R--;}
while(now<q[i].t) {
// cout<<q[i].t<<endl;
now++;
if(q[i].l<=c[now].pos && c[now].pos<=q[i].r){
if(!(--cnt[a[c[now].pos]])) Ans--;
if(++cnt[c[now].val]==) Ans++;
}
swap(c[now].val,a[c[now].pos]);
}
while(now>q[i].t) {
if(q[i].l<=c[now].pos && c[now].pos<=q[i].r) {
if(!(--cnt[a[c[now].pos]])) Ans--;
if(++cnt[c[now].val]==) Ans++;
}
swap(c[now].val,a[c[now].pos]);
now--;
}
ans[q[i].id]=Ans;
}
for(int i=;i<=Qcnt;i++) printf("%d\n",ans[i]);
return ;
}
LUOGU P1903 [国家集训队]数颜色 / 维护队列的更多相关文章
- Luogu P1903 [国家集训队]数颜色 / 维护队列  (带修莫队)
		
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> ...
 - bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)
		
P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...
 - P1903 [国家集训队]数颜色 / 维护队列(莫队区间询问+单点修改)
		
题目链接:https://www.luogu.org/problemnew/show/P1903 题目大意:中文题目 具体思路:莫队单点修改+区间询问模板题,在原来的区间询问的基础上,我们要记录当前这 ...
 - 洛谷 P1903 [国家集训队]数颜色 / 维护队列
		
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. \(Q\) \(L\) \(R\) 代表询问你从第L支画笔到第R支画笔中共有几种不同 ...
 - P1903 [国家集训队]数颜色 / 维护队列
		
思路 带修莫队的板子 带修莫队只需要多维护一个时间的指针即可,记录一下每个询问在第几次修改之后,再回退或者前进几个修改操作 排序的时候如果a.l和b.l在一个块里,就看r,如果a.r和b.r在一个块里 ...
 - P1903 [国家集训队]数颜色 / 维护队列   带修改的莫队
		
\(\color{#0066ff}{ 题目描述 }\) 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支 ...
 - P1903 [国家集训队]数颜色 / 维护队列(带修莫队)
		
题目描述: 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. ...
 - 洛谷P1903 [国家集训队]数颜色 / 维护队列  ( 带 修 )
		
题意:有两种操作: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 对每个1操作 输出答案: 带修莫队 模板题 (加 ...
 - 洛谷 P1903 [国家集训队]数颜色 / 维护队列 带修莫队
		
题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: \(1\). \(Q\) \(L\) \(R\)代表询问你从第\(L\) ...
 
随机推荐
- SQLite wrapper
			
SQLiteWrapper is a C++ wrapper for SQLite. There are some test programs that demonstrate how the SQL ...
 - JSOI 2008 魔兽地图
			
题目描述 DotR (Defense of the Robots) Allstars是一个风靡全球的魔兽地图,他的规则简单与同样流行的地图DotA (Defense of the Ancients) ...
 - python非对称加密模块rsa
			
一.代码 # 导入rsa库 import rsa.common class RSA(object): def __init__(self): self.key= rsa.newkeys(256) se ...
 - skyline中大数据量的三维场景刷新速度问题
			
我们做了一个的类似于TE Pro的桌面系统来代替TE Pro演示我们的大三维场景.我们的三维场景包括100平方公里的全要素场景,有建筑物,地面.小品.部件.植被等.在系统运行后,三维场景刷不起来,速 ...
 - C#,判断数字集合是否是连续的
			
/// <summary> /// 判断数字集合是否是连续的 /// </summary> /// <returns></returns> public ...
 - 杂项-Maven-guava:guava
			
ylbtech-杂项-Maven-guava:guava Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库.这个库是为了方便编码,并减少编码错误.这个库提供用于集合 ...
 - python基于SMTP发送邮件
			
import smtplib from email.header import Header from email.mime.text import MIMEText ''' SMTP是发送邮件的协议 ...
 - springboot新手脱坑之无法下载依赖包
			
1. Apache maven 3.39配置 1.环境变量自己配置, 2.配置阿里云镜像和本地仓库 <localRepository>D:\Apache\maven\repository& ...
 - MySQL二进制包安装及启动问题排查
			
环境部署:VMware10.0+CentOS6.9(64位)+MySQL5.7.19(64位)一.操作系统调整 # 更改时区 .先查看时区 [root@localhost ~]# date -R Tu ...
 - Maven使用初步
			
一.安装: 1.下载:http://maven.apache.org/download.cgi 2.设置环境变量 1.创建"M2_HOME",值为Maven安装路径(如:D:\Ja ...