BZOJ传送门洛谷传送门

数颜色

题目描述

墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令:

1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。

2、 R P Col 把第P支画笔替换为颜色Col。

为了满足墨墨的要求,你知道你需要干什么了吗?

输入输出格式

输入格式:

第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数。

第2行N个整数,分别代表初始画笔排中第i支画笔的颜色。

第3行到第2+M行,每行分别代表墨墨会做的一件事情,格式见题干部分。

输出格式:

对于每一个Query的询问,你需要在对应的行中给出一个数字,代表第L支画笔到第R支画笔中共有几种不同颜色的画笔。

输入输出样例

输入样例#1: 复制

6 5
1 2 3 4 5 5
Q 1 4
Q 2 6
R 1 2
Q 1 4
Q 2 6
输出样例#1: 复制

4
4
3
4

  分析:

  一开始不会打带修改莫队,就直接打了个不带分块的普通莫队,然后在洛谷水了40分,然后看了某位大佬的博客以后,会了带修改莫队,结果被洛谷数据卡常卡了一个小时,这数据也太可怕了吧。。。给出数据的人跪了Orz。。。(BZOJ上的数据一遍就过了。。。)把能用的优化都丢进去了,然后8000+ms过的。。。如果不会带修改莫队,请参考这位大佬的博客。这里蒟蒻就只放代码了。

  Code:

#include<bits/stdc++.h>
#define swap(x,y) x^=y,y^=x,x^=y
using namespace std;
const int N=5e4+;
const int M=1e6+;
int n,m,s,L,R,tot,ans[N];
int a[N],c[M],rn,qn;
struct Node{
int x,y,id,pos;
friend bool operator < (const Node a,const Node b){
if((a.x-)/s!=(b.x-)/s)return ((a.x-)/s)<((b.x-)/s);
if((a.y-)/s!=(b.y-)/s)return ((a.y-)/s)<((b.y-)/s);
return a.id<b.id;
}
}Q[N];
struct Num{
int x,y;}C[N];
char obuf[<<], *O=obuf;
inline int read()
{
char ch=getchar();int num=;
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<=''){
num=num*+ch-'';ch=getchar();}
return num;
}
inline void print(int x)
{
if(x>)print(x/);
*O++ = x%+'';
}
inline void change(int x,int i)
{
if(Q[i].x<=C[x].x&&C[x].x<=Q[i].y){
if(--c[a[C[x].x]]==)tot--;
if(++c[C[x].y]==)tot++; }
swap(a[C[x].x],C[x].y);
}
inline void add(int x)
{if(++c[a[x]]==)tot++;}
inline void del(int x)
{if(--c[a[x]]==)tot--;}
inline void work()
{
sort(Q+,Q+qn+);int now=;
for(int i=;i<=qn;i++){
while(L<Q[i].x)del(L++);
while(L>Q[i].x)add(--L);
while(R<Q[i].y)add(++R);
while(R>Q[i].y)del(R--);
while(now<Q[i].id){change(++now,i);}
while(now>Q[i].id){change(now--,i);}
ans[Q[i].pos]=tot;}
for(int i=;i<=qn;i++)
{print(ans[i]);*O++ = '\n';}
}
int main()
{
n=read();m=read();
for(int i=;i<=n;i++)a[i]=read();
for(int i=;i<=m;i++){
char ch[];scanf("%s",ch);
int x=read();int y=read();
if(ch[]=='R'){C[++rn].x=x;C[rn].y=y;}
else {Q[++qn].x=x;Q[qn].y=y;
Q[qn].id=rn;Q[qn].pos=qn;}}
s=ceil(exp((log(n)+log(qn))/));L=;R=;
work();fwrite(obuf, O-obuf, , stdout);
return ;
}

BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]的更多相关文章

  1. P1903 [国家集训队]数颜色 (带修改莫队)

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

  2. P1903 [国家集训队]数颜色 带修改莫队板子

    大概就是要多加一维time 然后按照(l的块,r的块,time)为关键字排序 转移区间修改还是按照莫队的方式(每个修改要记修改前后的状态) 然后玄学dalao告诉窝块大小设为\(O(n^{\frac{ ...

  3. 洛谷 P1903 [国家集训队]数颜色 解题报告

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

  4. ●洛谷P1903 [国家集训队]数颜色

    题链: https://www.luogu.org/problemnew/show/P1903题解: 序列带修莫队, 推荐博客https://www.cnblogs.com/Paul-Guderian ...

  5. [洛谷P1903][国家集训队]数颜色

    题目大意:有$n$支画笔,有两个操作 $Q\;l\;r:$询问$[l,r]$中有几种颜色 $R\;p\;Col:$把第$p$支画笔的颜色改成$Col$ 题解:带修莫队,分为$n^{\frac{1}{3 ...

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

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

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

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

  8. 洛谷 P1903 【模板】分块/带修改莫队(数颜色)

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

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

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

随机推荐

  1. 确保web安全的https、确认访问用户身份的认证(第七章、第八章)

    第七章 确保web安全的https 1.http的缺点: (1)通信使用明文,内容可能会被窃听 (2)不验证通信方的身份,因此有可能遭遇伪装 (3)无法证明报文的完整性,因此有可能已遭篡改. 2.通信 ...

  2. 解决nginx在记录post数据时 中文字符转成16进制的问题【转载】

    1. 问题描述 nginx 在获取post数据时候,如果是中文,则转换成16进制显示在日志文件中,如下图所示.   Paste_Image.png 日志格式为: log_format postdata ...

  3. 火狐浏览器下点击a标签时出现虚线的解决方案

    1.兼容性问题 火狐浏览器下点击a标签时出现虚线 2.解决方案 a:focus { outline: none;}

  4. Part2-HttpClient官方教程-Chapter6-HTTP缓存(HTTP Caching)

    原文链接 6.1. 一般概念 HttpClient Cache提供了一个与HTTP / 1.1兼容的缓存层与HttpClient(浏览器缓存的Java等价物.)一起使用.该实现遵循责任链设计模式,其中 ...

  5. CMD命令行下载文件

    远程执行sct的另一种姿势 cscript /b C:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbs 127.0.0.1 scrip ...

  6. mysql之数据库操作进阶(三)

    环境信息 数据库:mysql-5.7.20 操作系统:Ubuntu-16.04.3 查询 条件查询 # 使用where关键字 select * from 表名 where 条件 # 比较运算符 > ...

  7. Python【模块】importlib,requests

    内容概要:      模仿django中间件的加载方式      importlib模块      requests模块  rsplit()   用实际使用的理解来解释两个模块 importlib模块 ...

  8. 海量数据排序——如果有1TB的数据需要排序,但只有32GB的内存如何排序处理?

    转载:https://blog.csdn.net/fx677588/article/details/72471357 1.外排序  传统的排序算法一般指内排序算法,针对的是数据可以一次全部载入内存中的 ...

  9. 【转】CVE-2010-4258 漏洞分析

    一. 漏洞简介 CVE-2010-4258这个漏洞很有意思,主要思路是如果通过clone函数去创建进程,并且带有CLONE_CHILD_CLEARTID标志,那么进程在退出的时候,可以造成内核任意地址 ...

  10. Perl中文件读取操作

    Perl中文件读取操作 http://blog.csdn.net/yangxuan12580/article/details/51506216