【洛谷P1903】【BZOJ2120】数颜色 / 维护队列【带修莫队】

Windows11下QGIS 3.34.4安装Geo-SAM插件全流程(附RTX3060 CUDA12.0配置技巧) 本文详细介绍了在Windows 11系统中为QGIS 3.34.4安装和配置Geo-SAM插件的完整流程,特别针对RTX 3060显卡用户提供了CUDA 12.0与PyTorch环境的精准搭建方案。通过预编码与交互式分割两大核心步骤,该插件能显著提升遥感图像半自动标注的效率,降低硬件门槛,是地理信息处理领域融合AI技术的实用指南。 阅读详情

题目大意:

题目链接:
洛谷:https://www.luogu.org/problemnew/show/P1903
BZOJ:https://www.lydsy.com/JudgeOnline/problem.php?id=2120

nnn只画笔,维护以下操作:

  1. Q L RQ\ L\ RQ L R代表询问你从第LLL支画笔到第RRR支画笔中共有几种不同颜色的画笔。
  2. R P ColR\ P\ ColR P Col 把第PPP支画笔替换为颜色ColColCol。

思路:

一开始看到这题兴奋的敲了一个分块,敲到最后才发现col≤106col\leq 10^6col≤106而不是10510^5105。。。
正解是带修莫队。
如果没有修改操作,那么这就是莫队的板子。
只要加上修改就可以了。


其实莫队的修改也是暴力。
我们把每一个修改记录下来,然后把每一个询问前所需要的修改数也记录下来。如果询问iii比询问i−1i-1i−1多了一些修改,那么就把这些修改改好,如果少了就改回去。
其实真的就是暴力。

void work(int x,int i)  //要做第x次修改,这次是询问i
{
	if (chg[x].x>=ask[i].l&&chg[x].x<=ask[i].r)  //在区间内修改才有贡献
	{
		cnt[a[chg[x].x]]--;
		if (!cnt[a[chg[x].x]]) sum--;
		if (!cnt[chg[x].val]) sum++;
		cnt[chg[x].val]++; 
	}
	swap(a[chg[x].x],chg[x].val);
	//交换之后,如果下次要改回来时就相当于把现在的值储存到原数组里
}

带修莫队平均最有复杂度大约是取Block=n3Block=\sqrt[3]{n}Block=3n​。证明是不可能证明的XD
不知道为什么我敲的莫队跑的贼慢。不加Ofast,inlineOfast,inlineOfast,inline的话要跑4s+4s+4s+。请大佬斧正。


代码:

%:pragma GCC optimize("Ofast")
%:pragma GCC optimize("inline")
#include <cmath>
#include <cstdio>
#include <string>
#include <algorithm>
#define rr register
using namespace std;

const int N=50010,M=1000010;
int n,m,s,Q,T,l,r,sum,k,a[N],ans[N],cnt[M],pos[N];
char ch;

int read()
{
	int d=0;
	char ch=getchar();
	while (!isdigit(ch)) ch=getchar();
	while (isdigit(ch))
		d=(d<<3)+(d<<1)+ch-48,ch=getchar();
	return d;
}

void write(int x)
{
	if (x>9) write(x/10);
	putchar(x%10+48);
}

struct Ask
{
	int l,r,id,k;
}ask[N];

struct Change
{
	int x,val;
}chg[N];

bool cmp(Ask x,Ask y)
{
	if (pos[x.l]<pos[y.l]) return 1;
	if (pos[x.l]>pos[y.l]) return 0;
	return x.r<y.r;
}

void del(int x)
{
	cnt[a[x]]--;
	if (!cnt[a[x]]) sum--;
}

void add(int x)
{
	if (!cnt[a[x]]) sum++;
	cnt[a[x]]++;
}

void work(int x,int i)
{
	if (chg[x].x>=ask[i].l&&chg[x].x<=ask[i].r)
	{
		cnt[a[chg[x].x]]--;
		if (!cnt[a[chg[x].x]]) sum--;
		if (!cnt[chg[x].val]) sum++;
		cnt[chg[x].val]++;
	}
	swap(a[chg[x].x],chg[x].val);
}

int main()
{
	n=read(); Q=read();
	T=pow((double)n,(1.0/3.0));
	for (rr int i=1;i<=n;i++)
	{
		a[i]=read();
		pos[i]=(i-1)/T+1;
	}
	for (rr int i=1;i<=Q;i++)
	{
		while (ch=getchar()) if (ch=='Q'||ch=='R') break;
		if (ch=='Q')
		{
			m++;
			ask[m].l=read(); ask[m].r=read();
			ask[m].id=m; ask[m].k=s;
		}
		else
		{
			s++;
			chg[s].x=read(); chg[s].val=read();
		}
	}
	sort(ask+1,ask+1+m,cmp);
	l=1;
	for (rr int i=1;i<=m;i++)
	{
		for (;l<ask[i].l;l++) del(l);
		for (;l>ask[i].l;l--) add(l-1);
		for (;r<ask[i].r;r++) add(r+1);
		for (;r>ask[i].r;r--) del(r);
		for (;k<ask[i].k;k++) work(k+1,i);
		for (;k>ask[i].k;k--) work(k,i);
		ans[ask[i].id]=sum;
	}
	for (rr int i=1;i<=m;i++)
		write(ans[i]),putchar(10);
	return 0;
}
PX4从放弃到精通(十九):串口驱动 文章目录前言一、创建进程二、编写驱动 前言 硬件: PIXHAWK4 USB转串口模块 软件: Ubuntu18.04 PX4 1.11.3固件 QGC地面站 串口助手 一、创建进程 参考:https://mbot1.blog.youkuaiyun.com/article/details/122587617 二、编写驱动 ......... 阅读详情

相关推荐

【5G】5G 核心网(5GC)基本架构

本文旨在科普5G核心网相关知识...

Learning makes me happy (0^◇^0) 4万+

P1903 [国家集训队] 数颜色 / 维护队列

中出现的不同数的个数。询问离线,然后树状数组——怎么还带修改?这个时候就要请出带修莫队了。的时间复杂度解决一些区间询问,支持离线的问题。带上修改操作也不难维护,只需要增加一个。,表示该次询问前有几次修改,然后加上。接下来就是纯板子了,代码很好写的。给你一个序列,多次询问。

summ1ts的博客 438

用Python和sklearn预测NBA比赛胜负:从数据清洗到模型优化的完整流程

本文详细介绍了如何使用Python和sklearn构建NBA比赛胜负预测模型,涵盖从数据清洗、特征工程到模型优化与部署的完整流程。通过对比随机森林、XGBoost等主流算法,提供实战技巧和解决方案,帮助数据爱好者掌握体育数据分析的核心技术。

weixin_30823001的博客 131

数颜色 / 维护队列(带修莫队板子)

数颜色 //#pragma GCC optimize(2) //#pragma GCC optimize(3,"Ofast","inline") #include<bits/stdc++.h> #define int long long #define fi first #define se second #define pb push_back #define pii pair<int,int> #define IOS ios::sync_with_stdio(false);ci

qq_51737737的博客 164

ubuntu20.4源码安装最新gcc(gcc V12.2)

Ubuntu20.4自带的gcc为V9.4.0的版本,老版本的gcc存在不支持新版本C语言规范,在配置、编译、安装应用软件或工具时,可能存在不能正确安装的问题。(比如:libpqxx-7.7.4在配置时要求c++17版本的支持,但gcc V9.4.0版本不支持c++17)。因此本文介绍ubuntu20.4的系统下载最新gcc12.2版本源码,并进行本地编译、安装。本节内容包括gcc12.2的必备库安装和gcc12.2安装两部分内容组成。

q544344318的博客 1万+

git连接华为软件开发云

我用的是github客户端的git shell 连接。用git bash也可以github客户端下载地址:https://desktop.github.com/1.在华为软件开发云上创建代码仓库2.在本地创建密钥SSH密钥帮助文档公钥是代码托管服务(CodeHub)识别您的用户身份的一种认证方式,通过公钥,您可以将本地git项目与代码托管服务(CodeHub)建立联系, 然后您就可以很方便的将本地...

sigmeta的博客 2111

P1903 [国家集训队] 数颜色 / 维护队列(单点修改莫队)

与基础莫队的区别在于需要多维护一个变量---时间,用于标记修改操作的时间T,当每次询问区间[ L,R]时,我们就要把时间点调整到这个询问所处的时刻T。分块排序时,将T作为最不优先的判定。即在初级莫队算法的基础上,排序时多考虑一个时间T。每次区间查询时,将时间T调整到当前区间所处时间,再进行和初级莫队一样的查询操作。块,而不是基础莫队算法的 sqrt(n) 个块;利用分块算法将给定的 n 个数分成。

2302_79372568的博客 345

从零构建Carsim线控转向仿真:模型搭建、算法集成与整车联动实战

本文详细介绍了从零开始基于Carsim和Simulink搭建线控转向仿真模型的完整实战流程。内容涵盖RWA前轮执行器动力学建模与PID控制、卡尔曼滤波器估算齿条力、HWA方向盘手感模拟算法设计,以及最终实现HWA与RWA闭环联动并进行整车仿真调试。通过分步拆解,帮助读者深入理解线控转向系统的核心原理与工程实现。

weixin_29158413的博客 249

[洛谷P3939]:数颜色(二分)

题目传送门 题目描述 小$C$的兔子不是雪白的,而是五彩缤纷的。每只兔子都有一种颜色,不同的兔子可能有相同的颜色。小$C$把她标号从$1$到$n$的$n$只兔子排成长长的一排,来给他们喂胡萝卜吃。排列完成后,第$i$只兔子的颜色是$a_i$。俗话说得好,“萝卜青菜,各有所爱”。小$C$发现,不同颜色的兔子可能有对胡萝卜的不同偏好。比如,银色的兔子最喜欢吃金色的胡萝卜,金色的兔子更...

weixin_30394251的博客 237

信号系统核心概念:卷积、傅里叶变换与抽样定理的工程实践指南

信号与系统是理解现代电子、通信与数字处理技术的基石。其核心在于通过数学工具对物理世界进行建模与分析,其中卷积运算揭示了线性时不变系统对任意输入的响应可分解为冲激响应的叠加,这一原理极大提升了系统测试与分析的效率。而傅里叶变换则提供了从时域到频域的映射,将复杂的时域卷积运算转化为频域的简单乘法,是实现频谱分析、滤波设计的关键。抽样定理则架起了模拟与数字世界的桥梁,明确了无失真数字化的条件。这些基础理论共同构成了滤波器设计、音频处理、图像分析及通信系统等广泛工程应用的技术支柱。本文聚焦于卷积与傅里叶变换,结合冲

weixin_30788619的博客 629

专为AI打造的浏览器:内存占用仅为Chrome的1/9、比Chrome快11倍(Docker部署教程,支持飞牛nas等服务器部署)

🚀 专为AI打造的无头浏览器来了! 用Zig从零构建,内存仅Chrome的1/9,速度快11倍,原生CDP协议支持Docker部署,适合爬虫、自动化测试和AI代理应用。✨

XiaoqiangClub的博客 730

P1903 【模板】带修莫队 / [国家集训队] 数颜色 / 维护队列

带修莫队 模板

2403_87530627的博客 446

从 SAP GUI 走向 SAP Fiori:一套面向 SAP S/4HANA 的用户迁移实战方法论

SAP S/4HANA转型中,用户从SAP GUI迁移到Fiori的难点在于业务价值的重构而非简单的界面替换。Fiori的核心价值在于角色化、实时洞察和智能决策,而非完全替代GUI。成功迁移需分阶段推进:先展示关键角色的价值,建立统一入口,再逐步提高Fiori占比。让用户参与设计比后期培训更重要,需通过具体场景(如采购优先级管理)展示效率提升。迁移策略应平衡新旧界面优势,让Fiori成为业务价值触达的主要方式,而非强制替换。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 235

【洛谷】P1903

数据结构 #莫队。

Antonio915的博客 727

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

P1903 [国家集训队]数颜色 / 维护队列【带修莫队模板】

题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。 为了满足墨墨的要求,你知道你需要干什么了吗? 输入格式 第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数。 第2行N个整数,分别...

slass-mot-odet 478

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

P1903 [国家集训队]数颜色 / 维护队列

P1903 [国家集训队]数颜色 / 维护队列 题目描述 详见:P1903[国家集训队]数颜色 / 维护队列 solution 裸的带修莫队。 多记录一维询问时已经进行多少次修改。 用莫队思想暴力即可。 (不开O2时需要卡常,洛谷评测两发一样的代码,一个TLE4个点,一个AC,QAQ) code #include<bits/stdc++.h> using name...

xmr_pursue_dreams的博客 176

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【洛谷】P1903 [国家集训队]数颜色 / 维护队列 带修莫队

题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。 为了满足墨墨的要求,你知道你需要干什么了吗? 输入格式 第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数。 第2行N个整数,分别代表初始画笔排中第i支画笔的颜色。 第3行到第2+M行,每行分别代表墨墨会做的一件事情,格式见题干部分。 输出格

待到山花烂漫时 379

洛谷P3939 数颜色【主席树 or 莫队】

题目简述 小 C 把她标号从1到n的n只兔子排成长长的一排,来给他们喂胡萝卜吃。 第 i 只兔子的颜色是 a_i 小 C 想知道在区间 [l_j,r_j] 里有多少只颜色为 c_j的兔子。 有时编号为 x_j 和 x_j+1的两只兔子会交换位置 输入格式 输入第 1 行两个正整数 n,m。 输入第 2 行 n 个正整数,第 i 个数表示第 i 只兔子的颜色 a_i 输入接下来 m 行,每行为以下两种中的一种: “1 lj rj cj“1\ l_j\ r_j\ c_j“1&nbs

niiick 413

洛谷1903 带修莫队

/*洛谷1903 */ #include<cstdio> #include<algorithm> #include<iostream> #include<cmath> #include<cstdlib> #include<cstring> #include<string> #include<map&gt...

甦萌的博客 276

数颜色 / 维护队列(带修莫队)

一直想学这个算法,但是没有碰见类似的于是就作罢 今天忽然看到这道题有点感觉,搞一搞 感觉带修莫队其实不是特别深奥难懂的 只是在原有的基础上加了一个时间轴 我比较喜欢在struct里面写重载 struct Mo { int l,r,t,id; bool operator<(const Mo &a) const { if (...

weixin_30677617的博客 132

P1903 [国家集训队]数颜色 / 维护队列(带修莫队)

题目 题目传送门 题解 根据题意,我们有一些修改操作,所以这是一个带修莫队(废话) 那么再给出的每个操作中,修改和询问是有顺序的,所以我们在排序是需要在加上一个时间的排序,来达到优化。 当我们在查询时可再填加一个时间指针来表示到目前为止已经进行了几次修改,如果修改的次数大于当前要修改的问题编号,则把它还原,否则更新即可。 块的大小为n23n^{\frac{2}{3}}n32​(不会证明,记住...

MILLOPE的博客 371

数颜色(洛谷-P1903)

题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。 为了满足墨墨的要求,你知道你需要干什么了吗? 输入输出格式 输入格式: 第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事...

Alex_McAvoy的博客 720

【洛谷P1903】数颜色

题目大意:给定一个长度为 N 的序列,每个点有一个颜色。现给出 M 个操作,支持单点修改颜色和询问区间颜色数两个操作。 题解:学会了序列带修改的莫队。 莫队本身是不支持修改的。带修该莫队的本质也是对询问进行分块,不过在莫队转移时需要多维护一个时间维度,即:每个操作的相对顺序。具体来讲,将序列分成 \(O(n^{1 \over 3})\) 块,每个块的大小是 \(O(n^{2 \over ...

K1385170的博客 271

BZOJ 2120: 数颜色 && 2453: 维护队列 【带修莫队版题【也可以学黄学长分块

……学莫队QwQ    好神啊QwQ 复杂度什么的xjb讨论一下感觉好像挺对的23333 加个修改就相当于变成三维的查询……直接用三个指针,维护当前记录的左端点右端点和时间, 先把询问按照     第一关键字:左端点所在的块     第二关键字:右端点所在的块     第三关键字:前一个修改操作的时间 分块,yy一下可以证明……块大小是N^(2/3)的时候最优  于是就这么写咯……和

Flaze_的博客 723

数颜色/维护队列(带修莫队)

数颜色/维护队列 写完这题差不多直接1A?(第一次没吸氧,T了) 题意: 询问:求区间[l,r][l,r][l,r]之间有多少种不同的数字 修改:修改某个位置的数字 不强制在线 思路:(带修莫队板子) 基本与普通莫队一样,仅仅额外加上了时间这个维度(其实看代码更好懂),甚至按奇偶排序的小技巧也很好用! 分块的大小也有讲究(当然也可以采用其他玄学分块): 设分块大小为aaa,莫队算法时间复杂度...

UniverseofHK的博客 363
上一篇: 【洛谷P3370】【模板】字符串哈希【哈希】
下一篇: 赛艇表演【最短路】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值