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操作 输出答案: 带修莫队 模板题 (加 ...
随机推荐
- CabloyJS 4.12震撼发布,及新版教程尝鲜
引言 凡是可以用 JavaScript 来写的应用,最终都会用 JavaScript 来写 | Atwood 定律 目前市面上出现的大多数与 NodeJS 相关的框架,基本都将 NodeJS 定位在工 ...
- 什么是Gerber文件?PCB电路板Gerber文件简介
什么是Gerber文件: Gerber也叫"光绘",通常只代表一种格式如RS-274, 274D, 274X等,充任了将设计的图形数据转换成PCB制造的两头媒介,即一种CAD-CA ...
- Hyper-v安装虚拟机,提示the image's hash and certificate are not allowed错误的解决方法
本文迁移自Panda666原博客,原发布时间:2021年3月29日. Hyper-v安装虚拟机,提示the image's hash and certificate are not allowed错误 ...
- 什么是AR技术?AR的价值究竟有多大?
什么是AR技术? AR技术,解释来说就是增强现实(Augmented Reality),是一种实时地计算摄影机影像的位置及角度并加上相应图像.3D模型的技术,它的目标是把虚拟世界嵌套进真实世界进行互动 ...
- 文件上传漏洞靶场分析 UPLOAD_LABS
文件上传漏洞靶场(作者前言) 文件上传漏洞 产生原理 PASS 1) function checkFile() { var file = document.getElementsByName('upl ...
- $.fn解析
$.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法,那么后面你的每一个 ...
- ASP.NET MVC的核心-Controller(控制器)
"每一个请求都必须通过Controller处理,然而其中有些请求是不需要模型和视图的" MVC框架规定带Controller后缀的类称为所谓的"控制器",在xx ...
- jenkins自动触发构建
1. 安装jenkins cat /etc/yum.repos.d/jenkins.repo [jenkins] name=Jenkins baseurl=http://pkg.jenkins.io/ ...
- UiPath数据抓取Data Scraping的介绍和使用
一.数据抓取(Data Scraping)的介绍 使用截据抓取使您可以将浏览器,应用程序或文档中的结构化数据提取到数据库,.csv文件甚至Excel电子表格中. 二.Data Scraping在UiP ...
- 服务器与Ajax
前端相关的技术点 HTML 主要用来实现页面的排版布局 CSS 主要用来实现页面的样式美化 JavaScript 主要用来实现前端功能特效 Ajax基础知识铺垫 客户端与服务器 通信协议( ...