题目链接:https://www.luogu.org/problemnew/show/P1903

题目大意:中文题目

具体思路:莫队单点修改+区间询问模板题,在原来的区间询问的基础上,我们要记录当前这次操作之前单点修改的操作都有哪些,如果有多余的操作,就先消除这些操作:如果操作数还不够,就在加上这些操作就可以了,这个题会卡常数,注意block的赋值。

block的赋值 = ceil(exp((log(n)+log(num1))/3));这里的num1指的是操作数,n代表点的个数。

然后我们可以对比一下我写的这篇文章,

P1494 [国家集训队]小Z的袜子(莫队)

,在每一次指针的移动的时候,这个题需要把先前的影响给去掉,又因为每一次值的个数需要平方,所以需要先把原来的影响给去掉再去加上新的影响。而这个题我们是只需要判断当前的点是1还是0就可以了。

 

AC代码:

 #include<iostream>
#include<cmath>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
# define ll long long
const int maxn = 2e6+;
int a[maxn],block;
struct node1
{
int l,r,pos,id,num;
bool friend operator < (node1 t1,node1 t2)
{
if(t1.l/block!=t2.l/block)return t1.l/block<t2.l/block;
if(t1.r/block!=t2.r/block)return t1.r/block<t2.r/block;
return t1.num<t2.num;
}
} q1[maxn];
struct node2
{
int pos,val;
} q2[maxn];
int tot,vis[maxn],ans[maxn];
void update(int id,int pos)
{
if(q2[pos].pos>=q1[id].l&&q2[pos].pos<=q1[id].r)
{
if(--vis[a[q2[pos].pos]]==)
tot--;
if(++vis[q2[pos].val]==)
tot++;
}
swap(a[q2[pos].pos],q2[pos].val);
}
inline int read()
{
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'',c=getchar();}
return x*f;
}
void solve(int num1)
{
int num=,l=,r=;
tot=;
for(int i=; i<=num1; i++)
{
while(l<q1[i].l)if(--vis[a[l++]]==)tot--;
while(l>q1[i].l)if(++vis[a[--l]]==)tot++;
while(r<q1[i].r)if(++vis[a[++r]]==)tot++;
while(r>q1[i].r)if(--vis[a[r--]]==)tot--;
while(num<q1[i].num){
num++;
update(i,num);
}
while(num>q1[i].num)
{
update(i,num);
num--;
}
ans[q1[i].id]=tot;
}
return ;
}
int main()
{
// cout<<pow(50000,5.0/3.0)<<endl;
// memset(vis,0,sizeof(vis));
// freopen("hqx.in","r",stdin);
int n,m;
n=read();
m=read();
//scanf("%d %d",&n,&m);
for(int i=; i<=n; i++)
{
a[i]=read();
}
char str[];
int st,ed;
int num1=,num2=;
while(m--)
{
scanf("%s",str);
st=read();
ed=read();
if(str[]=='Q')
{
q1[++num1].l=st;
q1[num1].r=ed;
q1[num1].num=num2;
q1[num1].id=num1;
}
else if(str[]=='R')
{
q2[++num2].pos=st;
q2[num2].val=ed;
}
}
block=ceil(exp((log(n)+log(num1))/));
sort(q1+,q1+num1+);
solve(num1);
for(int i=; i<=num1; i++)
{
printf("%d\n",ans[i]);
}
// for(int i=1;i<=5;i++){
// cout<<i<<" "<<vis[i]<<endl;
// }
return ;
}

 

P1903 [国家集训队]数颜色 / 维护队列(莫队区间询问+单点修改)的更多相关文章

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

    P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...

  2. P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队

    \(\color{#0066ff}{ 题目描述 }\) 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支 ...

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

    题目描述: 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. ...

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

    题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: \(1\). \(Q\) \(L\) \(R\)代表询问你从第\(L\) ...

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

    题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...

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

    墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. \(Q\) \(L\) \(R\) 代表询问你从第L支画笔到第R支画笔中共有几种不同 ...

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

    思路 带修莫队的板子 带修莫队只需要多维护一个时间的指针即可,记录一下每个询问在第几次修改之后,再回退或者前进几个修改操作 排序的时候如果a.l和b.l在一个块里,就看r,如果a.r和b.r在一个块里 ...

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

    题意:有两种操作: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 对每个1操作 输出答案: 带修莫队 模板题 (加 ...

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

    传送门 解题思路 带修莫队,第一次写,其实和普通莫队差不多,就是多了个时间轴,块分n^(2/3)最优,时间复杂度O(n^(5/3)). #include<iostream> #includ ...

随机推荐

  1. Linux系统调用之内存管理

    brk 改变数据段空间的分配 sbrk 参见brk mlock 内存页面加锁 munlock 内存页面解锁 mlockall 调用进程所有内存页面加锁 munlockall 调用进程所有内存页面解锁 ...

  2. ElasticSearch6.5.0 【字段类型】

    字符串类型 text 适合全文索引,有分析的过程 keyword 适合结构化的数据,比如地址.电话号码... 数字 long [带符号64位整数]范围:-263 ~ 263-1 integer     ...

  3. jQuery获取节点和子节点文本的方法

    本节主要介绍了jQuery如何获取节点和子节点文本,下面有个示例,大家可以参考下 对于下面的html片段, ? 1 <div id="text_test">test t ...

  4. 在gitlab新建空项目,将本地的git仓库的内容上传

    gitlab新建了这个项目. 按照官网的步骤上传代码 一:将本地代码上传到本地仓库 1.进入项目文件夹 git init 2.项目代码添加到本地git git add . 3.提交到stage区域 g ...

  5. 3D游戏的角色移动

    * -----英雄的移动控制 * * * * */ using System.Collections; using System.Collections.Generic; using UnityEng ...

  6. 选择排序Java版

    package dataStructureAlgorithmReview.day01; import java.util.Arrays; /** * * @author shundong * */ p ...

  7. 《老梁四大名著情商课》笔记-学学TA,你就是聚会的万人迷

    <老梁四大名著情商课>笔记-学学TA,你就是聚会的万人迷 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 现在社会学家有一个统计,说中国处在单身状态大概有2个亿.这些人中 ...

  8. hd loadBalanceServer F5 BIG-IP / Citrix NetScaler / Radware / Array / HAProxy /

    s 五.Citrix NetScaler 和 CDN 案例 问题描述: Citrix 10.5.66.9软件版本下,存在计时器bug,此bug会造成CDN长连接回源超过设备默认的180S,会发fin包 ...

  9. 转 G1垃圾收集器入门

    转自:http://blog.csdn.net/zhanggang807/article/details/45956325 最近在复习Java GC,因为G1比较新,JDK1.7才正式引入,比较艰难的 ...

  10. angular,vue,react的基本语法—插值表达式,渲染数据,响应式数据

    基本语法: 1.插值表达式: vue:{{}} react:{} angular:{{}} 2.渲染数据 vue js: export default{ data(){ return{ msg:&qu ...