看代码学习好,好学好懂好ac

原题:

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

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

带修改的莫队裸题

额外增加一维表示时间,排序的时候优先级设为最底,然后莫队即可……

贡献什么的很好想,就不说了

注意想清楚时间轴和答案的关系

看代码学习好,好学好懂好ac

代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
struct dcd{int x,y,z,id;}b[],c[]; int tt=;
int n,m,a[]; int blck;
int l,r,t=;
int cnt[],nm=;
int ans[];
bool cmp(dcd x,dcd y){
return (x.x/blck==y.x/blck ? (x.y/blck==y.y/blck ? x.z<y.z : x.y<y.y) : x.x<y.x);
}
void chg(int x,int y){
if(l<=x && x<=r){
--cnt[a[x]]; nm-=(!cnt[a[x]]);
a[x]=y;
nm+=(!cnt[a[x]]); ++cnt[a[x]];
}
else a[x]=y;
}
void updt(int x,int y){
nm+=(!cnt[a[x]]); cnt[a[x]]+=y; nm-=(!cnt[a[x]]);
/*cout<<x<<" "<<y<<endl;
for(int i=1;i<=6;++i) cout<<cnt[i]<<" ";
cout<<endl;*/
}
int main(){//freopen("ddd.in","r",stdin);
cin>>n>>m; blck=(int)sqrt(n*1.0);
for(int i=;i<=n;++i) a[i]=rd();
char s[];
for(int i=;i<=m;++i){
scanf("%s",s); l=rd(),r=rd();
if(s[]=='Q') b[++tt].z=t,b[tt].x=l,b[tt].y=r,b[tt].id=tt;
else c[++t].x=l,c[t].y=r,c[t].z=a[l],a[l]=r;
}
for(int i=t;i>=;--i) a[c[i].x]=c[i].z;
sort(b+,b+tt+,cmp);
l=,r=,t=;
for(int i=;i<=tt;++i){
while(t<b[i].z) ++t,chg(c[t].x,c[t].y);
while(t>b[i].z) chg(c[t].x,c[t].z),--t;
while(r<b[i].y) ++r,updt(r,);
while(r>b[i].y) updt(r,-),--r;
while(l<b[i].x) updt(l,-),++l;
while(l>b[i].x) --l,updt(l,);
//cout<<i<<endl;
/*cout<<l<<" "<<r<<" "<<t<<" "<<nm<<endl;
for(int j=1;j<=6;++j) cout<<cnt[j]<<" ";
cout<<endl;
for(int j=1;j<=n;++j) cout<<a[j]<<" ";
cout<<endl;*/
ans[b[i].id]=nm;
}
for(int i=;i<=tt;++i) printf("%d\n",ans[i]);
return ;
}

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

  1. BZOJ2120 数颜色 【带修莫队】

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

  2. bzoj2120 数颜色 莫队 带修改

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

  3. BZOJ2120 数颜色 【带修改莫队】

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

  4. BZOJ2120 数颜色 —— 待修改莫队

    题目链接:https://vjudge.net/problem/HYSBZ-2120 2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit:  ...

  5. BZOJ2120 数颜色(树套树)

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

  6. [Bzoj2120]数颜色 (非正解 )(莫队)

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

  7. BZOJ2453维护队列&&BZOJ2120数颜色

    2016-05-28 11:20:22 共同的思路: 维护某种颜色上一次在哪里出现pre,可以知道当pre<询问的l时更新答案 块内按照pre排序 修改的时候重新O(n)扫一遍,如果和之前的不一 ...

  8. bzoj2120: 数颜色(BIT套主席树+set/分块)

    带修改的 HH的项链. 带修改考虑用BIT套主席树,查区间里有几个不同的数用a[i]上次出现的位置pre[i]<l的数有几个来算就好了. 考虑怎么修改.修改i的时候,我们需要改变i同颜色的后继的 ...

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

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  10. BZOJ2120 数颜色

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

随机推荐

  1. U帮忙U盘启动盘制作

    第一步:制作U盘启动盘前的软.硬件准备 1.准备一个U盘或内存卡(尽量使用2G以上的) 2.进入 U帮忙官网 下载最新版U盘启动盘制作工具! 3.搜索并下载ghost版系统文件存放到电脑中. 第二步: ...

  2. Linux十字病毒查杀处理

    之前处理过一次十字病毒,但未好好整理处理过程,现在转载一篇来自51cto的文章. 转自:http://blog.51cto.com/ixdba/2163018 十字符病毒,杀不死的小强,一次云服务器沦 ...

  3. 【转载】ZooKeeper学习第二期--ZooKeeper安装配置

    原文地址(https://www.cnblogs.com/sunddenly/p/4018459.html) 一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及 ...

  4. python 最小二乘拟合,反卷积,卡方检验

    import numpy as np # from enthought.mayavi import mlab ''' ogrid[-1:5:6j,-1:5:6j] [array([[-1. ], [ ...

  5. 在linux执行kettle

    1.下载 最新版下载 7.1 https://community.hitachivantara.com/docs/DOC-1009855 2.准备 3.上传任务文件 .kjb,.ktr 4.上传mys ...

  6. powerdesigner导出sql时报错 Generation aborted due to errors detected during the verification of the model.

    powerdesigner导出sql时报错 Generation aborted due to errors detected during the verification of the model ...

  7. <Web Crawler><Java><thread-safe queue>

    Basic Solution The simplest way is to build a web crawler that runs on a single machine with single ...

  8. python flask大型项目目录

    Hello World 作者背景 应用程序简介 要求 安装 Flask 在 Flask 中的 “Hello, World” 下一步? 模板 回顾 为什么我们需要模板 模板从天而降 模板中控制语句 模板 ...

  9. python day09作业答案

    2. def lst(input): lst2=[] count=0 for i in range(0,len(input)): if i %2!=0: lst2.append(input[i]) r ...

  10. Python socketserver ftp功能简单讲解

    socketserver模块实现并发 为什么要讲socketserver?我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信.它 ...