#带修改莫队,分块#jzoj 1942 洛谷 1903 数颜色

2024-02-11 05:18

本文主要是介绍#带修改莫队,分块#jzoj 1942 洛谷 1903 数颜色,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 R P Col 把第P支画笔替换为颜色Col。需要满足查询


分析

这道题看起来就是要离线的,需要用莫队,但是原莫队不支持修改,那么就弄一弄,当然还要用分块优化,就没有什么了(jzoj卡逐字符输入)


代码

#include <cstdio>
#include <cmath>
#include <algorithm>
struct dif{int whe,nnw,pre;}chg[50001]; int a[50001],ans[50001];
struct qus{int l,r,whe,rk;}q[50001]; int n,m,block,color[1000001];
int in(){int ans=0; char c=getchar();while (c<48||c>57) c=getchar();while (c>47&&c<58) ans=ans*10+c-48,c=getchar();return ans;
}
void print(int ans){if (ans>9) print(ans/10); putchar(ans%10+48);}
bool cmp(const qus &a,const qus &b){if (a.l/block!=b.l/block) return a.l/block<b.l/block;//分块if (a.r/block!=b.r/block) return a.r/block<b.r/block;return a.whe<b.whe;
}
int main(){n=in(); m=in(); int tot1=0,tot2=0,l=1,r=0,Ans=0,now=0;for (register int i=1;i<=n;i++) a[i]=in();for (register int i=1;i<=m;i++){char c=getchar();while (c<65||c>90) c=getchar();if (c=='R'){chg[++tot1]=(dif){in(),in(),0};chg[tot1].pre=a[chg[tot1].whe];//前一个答案a[chg[tot1].whe]=chg[tot1].nnw;//现在的答案}else q[++tot2]=(qus){in(),in(),tot1,tot2};}block=ceil(exp((log(tot1)+log(tot2))/3));//jzojREfor (register int i=tot1;i>=1;i--) a[chg[i].whe]=chg[i].pre;std::sort(q+1,q+1+tot2,cmp);for (register int i=1;i<=tot2;i++){while (q[i].l<l) Ans+=!color[a[--l]]++;//原莫队模板while (q[i].l>l) Ans-=!--color[a[l++]];while (q[i].r>r) Ans+=!color[a[++r]]++;while (q[i].r<r) Ans-=!--color[a[r--]];while (q[i].whe<now){int k=chg[now].whe;if (l<=k&&k<=r) Ans-=!--color[a[k]];a[k]=chg[now--].pre;//修改if (l<=k&&k<=r) Ans+=!color[a[k]]++;}while (q[i].whe>now){int k=chg[++now].whe;if (l<=k&&k<=r) Ans-=!--color[a[k]];a[k]=chg[now].nnw;if (l<=k&&k<=r) Ans+=!color[a[k]]++;}ans[q[i].rk]=Ans;//离线返回}for (register int i=1;i<=tot2;i++) print(ans[i]),putchar('\n');return 0;
}

这篇关于#带修改莫队,分块#jzoj 1942 洛谷 1903 数颜色的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/698925

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文