Description

墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。为了满足墨墨的要求,你知道你需要干什么了吗?

Input

第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数。第2行N个整数,分别代表初始画笔排中第i支画笔的颜色。第3行到第2+M行,每行分别代表墨墨会做的一件事情,格式见题干部分。

Output

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

Sample Input

6 5
1 2 3 4 5 5
Q 1 4
Q 2 6
R 1 2
Q 1 4
Q 2 6

Sample Output

4
4
3
4

HINT

对于100%的数据,N≤10000,M≤10000,修改操作不多于1000次,所有的输入数据中出现的所有整数均大于等于1且不超过10^6。

 
正解是什么?我不知道
参考hzwer的思路,这题可以暴力分块,因为修改少。
记录每个颜色的上一次出现在那,然后排个序。边上暴力查找比上一个比l小的点,块内二分
话说lower_bound是查询前闭后开的区间。。。
 #include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=;
int bel[N],last[],size[N],pre[N],q[N],a[N],c[N];
int num,n,m,l,r,p,col,ans; void build(){
int block=sqrt(n);
for(int i=;i<=n;i++){
bel[i]=(i-)/block+;
if(bel[i]>num) num=bel[i];
size[bel[i]]++;
pre[i]=last[a[i]];
c[i]=pre[i];
last[a[i]]=i;
}
} void reset(int x){
for(int i=q[x-]+;i<=q[x];i++) pre[i]=c[i];
sort(pre+q[x-]+,pre+q[x]+);
} int find(int x,int y){
int tmp=lower_bound(pre+q[x-]+,pre+q[x]+,y)-pre-q[x-]-;
return tmp;
} int ask(int l,int r){
if(bel[l]==bel[r]){
for(int i=l;i<=r;i++) if(c[i]<l) ans++;
}
else{
for(int i=l;i<=q[bel[l]];i++) if(c[i]<l) ans++;
for(int i=q[bel[r]-]+;i<=r;i++)
if(c[i]<l) ans++;
}
for(int i=bel[l]+;i<bel[r];i++) ans+=find(i,l);
return ans;
} void change(int x,int y){
for(int i=;i<=n;i++) last[a[i]]=;
a[x]=y;
for(int i=;i<=n;i++){
int t=c[i];
c[i]=last[a[i]];
if(t!=c[i]) reset(bel[i]);
last[a[i]]=i;
}
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
build();
for(int i=;i<=num;i++) q[i]=q[i-]+size[i];
for(int i=;i<=num;i++)
reset(i);
char s[];
for(int i=;i<=m;i++){
scanf("%s",s);
if(s[]=='Q'){
ans=;
scanf("%d%d",&l,&r);
printf("%d\n",ask(l,r));
}
else{
scanf("%d%d",&p,&col);
change(p,col);
}
}
}

【BZOJ 2120】 数颜色的更多相关文章

  1. BZOJ 2120 数颜色(带修改的莫队)

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MB Submit: 3478  Solved: 1342 [Submit][Status][Discus ...

  2. BZOJ 2120: 数颜色

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 3623  Solved: 1396[Submit][Status][Discuss] ...

  3. BZOJ 2120: 数颜色 分块

    2120: 数颜色 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...

  4. Bzoj 2120: 数颜色 && 2453: 维护队列 莫队,分块,bitset

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 2645  Solved: 1039[Submit][Status][Discuss] ...

  5. BZOJ 2120 数颜色 (带修莫队)

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 6367  Solved: 2537[Submit][Status][Discuss] ...

  6. BZOJ 2120 数颜色 【带修改莫队】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2120 2120: 数颜色 Time Limit: 6 Sec  Memory Limit: ...

  7. bzoj 2120 数颜色 题解

    转载请注明:http://blog.csdn.net/jiangshibiao/article/details/23990489 [原题] 2120: 数颜色 Time Limit: 6 Sec  M ...

  8. bzoj 2120 数颜色 (带修莫队)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2120 题意:两种操作:Q 询问区间  l - r  内颜色的种类 ,R 单点修改 思路 ...

  9. BZOJ 2120 数颜色(带修改莫队)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2120 [题目大意] 给出一颜色序列,每次可以修改一个位置的颜色或者询问一个区间不同颜色 ...

  10. BZOJ 2120 数颜色&2453 维护队列 [带修改的莫队算法]【学习笔记】

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 3665  Solved: 1422[Submit][Status][Discuss] ...

随机推荐

  1. 右下角弹出"Windows-延缓写入失败"或者"xxx-损坏文件 请运行Chkdsk工具"

    知识点分析: 任务栏右下角弹出“Windows-延缓写入失败”或者“xxx-损坏文件 请运行Chkdsk工具”. 操作步骤: 方法一:Chkdsk工具 在开始---运行中输入cmd,然后输入chkds ...

  2. 021ARM处理器工作模式

    1.User模式:usr,普通应用程序运行的模式: 2.FIQ模式:fiq,快速中断模式,当一个程序正在运行时,突然产生一个中断,而且这种中断属于快速中断,那么将进入快速中断模式下运行: 3.IRQ模 ...

  3. jquery 读取xml

    <script type="text/javascript" src="jquery/jquery-1.11.3.min.js"></scri ...

  4. [leetcode]_Sum Root to Leaf Numbers

    题目:计算一棵二叉树所有路径组成的数的总和. 思考:也是DFS的基础应用.虽然还是套着别人的DFS框架写的,但是学习通常会经历先模拟,再创新的过程. 代码: private int sum = 0; ...

  5. 仿淘宝颜色属性选择展示代码(jQuery)

    模仿淘宝商品选择颜色和尺寸的效果,即选择商品颜色和尺寸的时候,把选择的颜色和尺寸放到一个页面容器里面,不足之处,还望指教. <!DOCTYPE HTML> <html lang=&q ...

  6. JS获取网页属性包括宽、高等

    JS获取网页属性包括宽.高等. function getInfo()  { // www.jbxue.com var s = "";  s += " 网页可见区域宽:&q ...

  7. Cache-control使用:header('Cache-control:private')

    发布:thebaby   来源:net     [大 中 小] 转自:http://www.jbxue.com/article/5624.html网页缓存由 HTTP消息头中的“Cache-contr ...

  8. DevExpress 中 在做全选的全消功能的时候 加快效率

    在做 DevExpress 中对增加的选择 Check列 控制全选的全消时通过以下代码红色字代码效率会有明显的提升: private void CheckedRow() { try { splashS ...

  9. ASP.NET Web API安全认证

    http://www.cnblogs.com/codeon/p/6123863.html http://open.taobao.com/docs/doc.htm?spm=a219a.7629140.0 ...

  10. 使用supervisor的一些注意事项

    一直都有在使用supervisor来管理linux上的服务进程.最近有同事说有某服务貌似有问题,让上去检查一下.上去以后发现某服务反应的确很慢,所以就用supervisor重启一下.但是重启的时候就发 ...