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

洛谷P1903 [国家集训队]数颜色 / 维护队列 题目描述 题解 第一眼看过去是带修莫队。效率 O(n53)O(n^{\frac{5}{3}})O(n35​) 。可惜洛谷给出的标签是树套树,于是思考一下怎么用数据结构维护。 如果没有修改的话,我们考虑怎么在线计算答案,考虑到一种颜色只能计算一次,所以可以想到如果 [l,r][l,r][l,r] 中有的颜色的前驱出现在 [0,l−1][0,l-1][0,l−1] (没有即 000 ),那就造成贡献,... 阅读详情

传送门
题意:有一个长度为n的数组,q次操作,询问[L,R]区间不同数字个数或者修改某个位置的数字

题解:带修改莫队模板题。比普通的莫队题多了个修改操作,带修改莫队也就比普通莫队多了一维时间,记录之前一次修改操作的位置,具体实现看代码

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
#define debug(x) cout<<#x<<" is "<<x<<endl;

const int maxn=1e6+5;

struct ac1{
    int id;
    int L;
    int R;
    int pre;
}q[maxn];

struct ac2{
    int pos;
    int col;
}cg[maxn];

int a[maxn],in[maxn],len,ans,acc[maxn];

bool cmp(struct ac1 aa,struct ac1 bb){
    if((aa.L/len+(aa.L%len!=0))!=(bb.L/len+(bb.L%len!=0)))return (aa.L/len+(aa.L%len!=0))<(bb.L/len+(bb.L%len!=0));
    else if((aa.R/len+(aa.R%len!=0))!=(bb.R/len+(bb.R%len!=0)))return (aa.R/len+(aa.R%len!=0))<(bb.R/len+(bb.R%len!=0));
    return aa.pre<bb.pre;
}

void add(int pos,int val){
    in[a[pos]]+=val;
    if(in[a[pos]]==1&&val>0)ans++;
    if(in[a[pos]]==0&&val<0)ans--;
}

void chg(int num,int i){
    if(cg[num].pos>=q[i].L&&cg[num].pos<=q[i].R){
        in[a[cg[num].pos]]--;
        in[cg[num].col]++;
        if(in[a[cg[num].pos]]==0)ans--;
        if(in[cg[num].col]==1)ans++;
    }
    swap(a[cg[num].pos],cg[num].col);
}

int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    int id1,id2;
    id1=id2=0;
    for(int i=1;i<=m;i++){
        char ch[5];
        scanf("%s",ch);
        if(ch[0]=='Q'){
            ++id1;
            q[id1].id=id1;
            scanf("%d%d",&q[id1].L,&q[id1].R);
            q[id1].pre=id2;
           // debug(id2);
        }
        else{
            ++id2;
            scanf("%d%d",&cg[id2].pos,&cg[id2].col);
        }
    }
    len=pow(n,0.67);
    sort(q+1,q+1+id1,cmp);
    int l,r,tim;
    l=r=tim=0;
    for(int i=1;i<=id1;i++){
        while(l>q[i].L){
            add(--l,1);
        }
        while(r<q[i].R){
            add(++r,1);
        }
        while(l<q[i].L){
            add(l++,-1);
        }
        while(r>q[i].R){
            add(r--,-1);
        }
        while(tim>q[i].pre){
            chg(tim--,i);
        }
        while(tim<q[i].pre){
            chg(++tim,i);
        }
        acc[q[i].id]=ans;
    }
    for(int i=1;i<=id1;i++)printf("%d\n",acc[i]);
    return 0;
}

手把手教你安装 Vivado2022.2(附安装包) Vivado 2022.2版本与之前的版本相比,具有以下几个显著的优势:电源设计管理器(PDM):Vivado 2022.2引入了全新的电源设计管理器(PDM),这是一个下一代功耗评估平台,为Versal® 和 Kria™ SOM提供了准确一致的功耗估计能力。PDM是Versal产品家族的首选功耗评估工具,为Versal ACAP硬IP块提供增强向导,简化从XPE向PDM的迁移,帮助用户获得准确的功耗评估。 阅读详情

相关推荐

Wine7.22实战:如何在Ubuntu上完美运行通达信和微信(附字体配置技巧)

本文详细介绍了如何在Ubuntu系统上使用Wine7.22版本,完美运行通达信和微信这两款Windows专属软件。通过选择稳定的Wine7.22版本、利用现成的兼容容器,并重点解决了中文字体渲染的核心难题,提供了从环境搭建、字体配置到软件安装调优的一站式实战指南,帮助用户在Linux环境下无缝使用关键金融与通讯工具。

weixin_29280657的博客 549

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

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

汤键的博客 320

Pattern Recognition 投稿过程记录,含Elsevier Latex模板使用

Pattern Recognition 投稿过程记录,含Elsevier Latex模板使用 最近在Pattern Recognition投出了一个文章,纯纯属于是第一次投稿,感觉自己写了一坨屎,事实是这确实也是一坨屎,现在是投了之后在等待一个拒稿的状态。 但是还是记录一下一些流程 1. 下载模板 在出版商Elsevier的栏目里有对于稿件的结构要求,也提供了Latex模板。同时,也给作者提供了Guides, 可以仔细阅读。下面这个连接咱们可以下载到Guides以及看到一些文章的要求。 https://ww

weixin_44153180的博客 3万+

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

给出一个大小为n的数组,有q次操作(查询[l,r]区间有多少个不同数或者修改某一个值)。 带修改的莫队。和普通莫队不同的是多了一维时间。因此在做区间修改之间,需要把时间序列修补一下。保存查询的时候需要保存当前修改序列的时间,在查询的时候需要走到当前时间。 另外在排序的时候,第二关键字r不再是奇偶block去排了,如果block相等,则按查询顺序,不相等则直接按r的大小。 block的大小从sqrt(n) 变成n^2/3。 int block_size; struct query{ ..

二次元的coding生活 157

手把手教程:使用C#实现工业上位机开发

深入讲解如何利用C#进行上位机开发,涵盖通信协议与界面设计,助力掌握工业自动化核心技能。结合实际案例,让上位机开发更高效直观。

weixin_32480007的博客 2065

基于MediaPipe的智能俯卧撑计数与姿势矫正系统

在现代健身和体能训练中,俯卧撑是最基础也是最有效的自重训练动作之一。然而,许多人在进行俯卧撑训练时常常存在姿势不正确、计数不准确等问题。本文将介绍如何利用计算机视觉和姿态估计技术,开发一个智能的俯卧撑计数与姿势矫正系统。

qq_36224726的博客 916

P1903 [国家集训队]数颜色 / 维护队列 -------莫队算法

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

weixin_43913594的博客 506

ICC2:mem出pin的Off Grid问题

这个命令本意是解决跨制成调用IP时在IP出pin位置加一定的routing blockage,限制绕线在一定范围内只能走直线出pin,用来解决off-grid问题也有很好的效果。在ICC2做先进工艺时会有off-grid的问题,off-grid可以理解为绕线没有在preferred方向track上。测试发现,2022版本以前的ICC2绕线容易有off-grid问题。主要在mem出pin的M2/M3层次上,切换版本绕线能很大程度上解决这个问题。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1630

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

P1903 [国家集训队]数颜色 / 维护队列 板子题 带修莫队的的和普通莫队的区别就在于增加了修改操作 在一操作,求完之后在看修改的,把修改的部分加上去,加到该次操作之前 另外这里的块大小应该设为n23n^{\frac{2}{3}}n32​才能过,一般的根号过不了 #include <bits/stdc++.h> #define inf 0x7fffffff #define ll long long //#define int long long //#define double long d

lcl1234567890lcl的博客 158

PyTorch实战(20)——生成对抗网络(Generative Adversarial Network,GAN)

自生成对抗网络 (Generative Adversarial Network, GAN) 提出以来,一直是一个活跃的研究和开发领域。本节探索了 GAN 的基本概念,重点解析了其两大核心组件——生成器与判别器的架构设计,深入阐述了 GAN 模型的整体工作机制,并使用 PyTorch 从零开始实现了深度卷积生成对抗网络 (Deep Convolutional GAN, DCGAN)。

盼小辉丶的博客 3543

2024年电气工程师最新面试题及答案

1. **基本电气工程原理**:包括电流、电压、电阻、功率等基本概念。2. **欧姆定律**:V = IR,描述电压、电流和电阻之间的关系。42. **风力发电系统组成**:包括风力涡轮机、发电机、控制系统等。44. **智能电网技术**:包括自动化控制、通信技术、数据分析等。10. **减少EMI**:使用屏蔽、滤波、合理布线等方法。40. **光伏系统组成**:包括光伏板、逆变器、控制器等。48. **能量存储技术**:包括电池、超级电容器、飞轮等。

guo162308的博客 6563

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

https://www.luogu.com.cn/problem/P1903 离线修改的莫队可以多增加一维的时间,然后变成[l,r,t]->[l+-1,r+-1,t+-1] 先按左端点块排序,再按右端点块排序,再按时间大小排序。 块的大小需要是n^(2/3),可以吧总复杂度变成O(n^(5/3)),优于n^2 实际上在1e5的数据下洛谷最大的点只跑了846ms,还没加读入优化 #include<bits/stdc++.h> using namespace std; const

binarycopycode 211

百度百科 X-Bk-Token 算法还原

百度百科 X-Bk-Token 算法还原

自成背后的博客 1万+

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

const int N=1e6+5; int n,m; int i,j,k; int a[N]; int block,vis[N],now,ans[N]; int tim,ask,mdf; struct Query { int l,r; int tim,id; int lbel,rbel; Query(int l=0,int r=0,int tim=0,int id=0):l(l),r(r),tim(tim),i...

C_Dreamy的博客 474

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

莫队算法学习笔记

看了AgOH大佬的视频https://www.bilibili.com/video/BV1C4411u7rK?from=search&seid=5854182600235483127 然后写了视频里的洛谷板子题 洛谷P2709 小B的询问 https://www.luogu.com.cn/problem/P2709 #include<iostream> #include<algorithm> #include<cmath> #include<cstring&

REXWind的博客 262

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

pystraf的博客 974

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

待到山花烂漫时 379

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

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

2302_79372568的博客 345

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

正题 题目链接:https://www.luogu.com.cn/problem/P1903 题目大意 要求支持两个操作 Q  L  R:Q\ \ L\ \ R:Q  L  R:询问L,RL,RL,R之间有多少个不同的数 R  P  Col:R\ \ P\ \ Col:R&n...

QuantAsk 514

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

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

qq_35975367的博客 407

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

带修莫队 模板

2403_87530627的博客 447

【洛谷】P1903

数据结构 #莫队。

Antonio915的博客 727

题解 洛谷P1903/BZOJ2120【[国家集训队]数颜色 / 维护队列】

对于不会树套树、主席树的本蒟蒻,还是老老实实的用莫队做吧.... 其实这题跟普通莫队差不了多远,无非就是有了一个时间,当我们按正常流程排完序后,按照基本的莫队来,做莫队时每次循环对于这一次操作,我们在结构体中记录一下这次操作前有多少个改值操作,然后将当前的ans和每个点的颜色信息更新至当前队列(此队列不是莫队,是原队列)的状态再移动l,r两指针。 简单点说: 设当前询问为a,下一个询问为...

dingzongdu1901的博客 265

莫队模板

莫队模板

qq_42643660的博客 355

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

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

slass-mot-odet 478
上一篇: cf1181D Irrigation[思维+权值线段树求第k小]
下一篇: cf1238E. Keyboard Purchase [状压dp]
MekakuCityActors
博客等级 码龄9年 18粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值